2015-08-29 186 views
2

我有一個Neo圖,如果我選擇某些關係,是一棵樹。Neo4j Cypher查詢返回節點沿任意長的路徑

我想從任意一個節點開始,找到所有到達根節點的節點。我想讓我回到兩者之間的所有節點,包括兩端。在例子中,我需要按順序排列節點「a,t,c,d,e,ROOT」。

想象的樹有一個分支,它看起來像

a-[]->t-[]->c-[]->d-[]->e-[]->ROOT 

如果我在乎的關係是x,y和z,如果根節點被稱爲根目錄,起始節點具有一定的ID(唯一值),我得到的是這樣的:

(a {id:an_id})-[*:x|y|z]->(root:ROOT) return a, root 

返回我的目的,但我怎麼也讓他們之間的節點?

編輯

節點(...)http://neo4j.com/docs/stable/query-functions-collection.html#functions-nodes

+0

BTW。它是一個'y'的Cypher :) –

回答

3

你得到它幾乎是正確:

你有你的表達分配給路徑,.e.g。 p

MATCH p= (a:Leaf {id:an_id})-[:x|:y|:z*]->(root:ROOT) 
RETURN p,a,root, nodes(path); 

它可能是更有效地使用最短路徑

MATCH p= shortestPath((a:Leaf {id:an_id})-[:x|:y|:z*]->(root:ROOT)) 
RETURN p,a,root, nodes(p); 
+0

謝謝,我將移動到甲板上,啓動工作機器,並閱讀'路徑'文檔。你有第二個例子的括號,但不是第一個。有關係嗎?在第一個例子中,「路徑」從哪裏來? –

+0

這已經完成了訣竅,並游泳。 –

+1

括號屬於shorestPath函數。 –

相關問題