在使用neo4j資料庫時,會遇到計算與指定節點產生關聯的數量統計需求,例如指定6個節點1,2,3,4,5,6需要找出與這6個節點中4個節點有關聯的節點(要求排除這6個節點的資料)
先看實現查詢語句:
MATCH (start:person_info)-[r1]-(n)-[r2]-(end:person_info) WHERE start.persocountId in ['1','2','3','4','5','6'] and end.persocountId in ['1','2','3','4','5','6'] and start.persocountId <> end.persocountId and start.persocountId <> n.persocountId and end.persocountId <> n.persocountId WITH collect(start.persocountId) + collect(end.persocountId) AS ids, n.persocountId AS idMidle UNWIND ids AS id WITH collect(DISTINCT id) AS countId,idMidle where length(countId)>=4 RETURN countId, idMidle
上述語句中
person_info:是實體表
r1:是他們之間的關係
['1','2','3','4','5','6']:指定的6個節點的id號
語句思路:
1、與這6個人都有關係,那麼start:person_info和end:person_info 必須是這6個節點中的實體。
2、start,n,end 三個節點不能相等。
3、將start和end節點放入一個集合中collect(start.persocountId) + collect(end.persocountId) AS ids
4、將集合中的重複資料去除掉 UNWIND ids AS id WITH collect(DISTINCT id)
5、集合中節點數量大於等於4的是需要查詢的節點
6、返回與6個節點中4個節點有關聯的節點的,節點id以及產生關係的節點的id集合
上述紅色部分是,將兩個集合合併,並且去掉重複資料的關鍵點。