2016-08-01 75 views
0

我試圖找到我的數據庫中連接到另一種類型的多個其他節點的某種類型的節點的數量。就我而言,它是將節點連接到幾個名稱節點。我有一個可行的查詢:在Neo4j中包含變量WITH語句更改查詢輸出

MATCH rels=(p:Place)-[c:Called]->(n:Name) 
WITH p,count(n) as counts 
WHERE counts > 1 
RETURN p;` 

然而,只有返回的地方節點,與理想的我想它返回所有節點和邊參與。我發現a question on returning variables from before the WITH,但如果我有任何我所定義的其他變量,查詢不返回任何響應,即該查詢返回任何內容:

MATCH rels=(p:Place)-[c:Called]->(n:Name) 
WITH p, count(n) as counts, rels 
WHERE counts > 1 
RETURN p; 

我不知道如何返回信息我希望不改變查詢的結果。任何幫助,將不勝感激

回答

0

你的第二個查詢沒有返回的原因是因爲它的WITH子句指定爲aggregation「分組關鍵字」既prels。由於每個rels路徑只有一個n值,counts將始終爲1

像這樣的事情可能會爲你工作:

MATCH path=(p:Place)-[:Called]->(:Name) 
WITH p, COLLECT(path) as paths 
WHERE SIZE(paths) > 1 
RETURN p, paths; 

這將返回每個匹配的Place節點及其所有路徑。

+0

謝謝你鏈接到聚合的解釋,它肯定幫助我理解這種情況下發生了什麼,用一個很好的優雅查詢在我的數據庫中起作用。 –

0

試試這個:

MATCH (p:Place)-[c:Called]->(n:Name) 
WHERE size((p)-[:Called]->(:Name)) > 1 
WITH p,count(n) as counts, collect(n) AS names, collect(c) AS calls 
RETURN p, names, calls, counts ORDER BY counts DESC; 

這個查詢利用暗號的collect()函數創建名稱列表,並呼籲關係爲比具有名稱節點稱爲關係更加每個地方。

+0

感謝您的支持,您的查詢可以在我的數據庫上正常工作,並有助於更好地瞭解收集。如果只有我有超過一個驗收檢查給! –