neo4j 統計多個節點之間關係總和的寫法-包含多個collect合併成一個並去重操作

万笑佛發表於2024-09-29

在使用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集合

上述紅色部分是,將兩個集合合併,並且去掉重複資料的關鍵點。

相關文章