2015-02-10 120 views
2

儘管閱讀了很多文檔,但我仍在努力解決問題......我試圖找到我的圖形根節點(或節點,它們可能是幾個頂級節點)並計算他們的直系子女(所有關係都輸入:BELONGS_TO)Neo4j cypher - 計算根節點的直接子節點

我的圖形看起來像這樣(參見附圖)。我一直在嘗試下面的查詢,只要根節點只有一個輸入關係,它就不會有效,當它有多個關係時就不會。 (我還沒有真正熟悉cyhper語言)。

MATCH (n:Somelabel) WHERE NOT (()-[:BELONGS_TO]->(n:Somelabel)) RETURN n 

任何幫助將不勝感激! (我還沒有試圖計算根節點直接孩子尚未...這將是「2」根據我圖)

enter image description here

正確的查詢被cybersam給

MATCH (n:Somelabel) WHERE NOT (n)-[:BELONGS_TO]->() RETURN n; 

MATCH (n:Somelabel)<-[:BELONGS_TO]-(c:Somelabel) 
WHERE NOT (n)-[:BELONGS_TO]->() RETURN n, count(c); 
+0

有人可以編輯它,因此它不是第一個查找根節點的搜索結果嗎? – tladuke 2017-03-09 20:53:19

回答

4

根據你的圖,看起來你實際上是在尋找「葉」節點。此查詢將搜索所有不存在傳出關係的Somelabel節點,並返回每個此類節點以及具有指向該節點的關係的不同節點數的計數。

MATCH (n:Somelabel) 
WHERE NOT (n)-[:BELONGS_TO]->() 
OPTIONAL MATCH (m)-[:BELONGS_TO]->(n) 
RETURN n, COUNT(DISTINCT m); 

如果您實際上正在查找所有「根」節點,您的原始查詢將會起作用。

作爲一個全面的檢查,如果你有,你認爲這是一個「葉」節點的特定節點(假設它有一個123的id值),該查詢將返回一個單行nullrm 。如果你得到非空結果,那麼你實際上有外向關係。

MATCH (n {id:123}) 
OPTIONAL MATCH (n)-[r]->(m) 
RETURN r, m 
+0

其實我試圖找到所有葉節點(那些沒有外向關係的節點)。 「BELONGS_TO讓我感到困惑,但是,查詢並沒有返回我的節點... – 2015-02-10 19:06:11

+0

我已經在我的答案中加入了':BELONGS_TO'關係類型,因爲您實際上可能有其他類型的關係「葉」節點)。另外,你確定你正在爲節點使用正確的標籤嗎? – cybersam 2015-02-10 19:10:42

+0

謝謝你。是的,我使用正確的標籤;-)。還是行不通。我想知道,我試圖找到的葉節點可能有其他外向關係,我在Neo4j瀏覽器中看不到...可以這樣嗎?我怎麼能列出所有從/該節點的關係(通過{id:「sssss」}找出?最後一件事情。葉節點有幾個傳入的關係。你會查詢工作嗎? – 2015-02-10 19:15:10