正如你不說,否則我假設你正在使用Neo4j的當前版本(2.0),並且「它不工作」意味着startNode(r)
抱怨r是一個集合,而不是關係。要運行一個函數或集合使用提取的每一個成員表達式或減少(的foreach是寫操作)
RETURN EXTRACT(rel IN r | [startNode(rel),endNode(rel)]) as nodePairCollection
這對於像a-[:REL]->b-[:REL]->c-[:REL]->d
的路徑讓你像[[a,b],[b,c],[c,d]]
,或
RETURN REDUCE(acc = [], rel IN r | acc + startNode(rel) + endNode(rel)) as flattenedNodeCollectionWithDulicates
結果
它給出[a,b,b,c,c,d]
,或者對其中的一個進行過濾。
這就是如何從關係中明確獲取起始節點和結束節點。但是,對於您的特定類型的查詢以上,其中在R的所有關係具有相同的方向,你可以湊合着剛剛重新調整路徑上的節點,因爲它們已經被正確排序
MATCH path=n-[r:childof*]->parent
RETURN nodes(path)
這給出[a,b,c,d]
,但只有當你明確地將它包含在你的模式中時,你才能相信這是代表關係的方向。
你是什麼意思「它不起作用?」怎麼了?哪個版本的Neo4j? – jjaderberg