2014-01-24 47 views
2

我想獲取關係列表的開始和結束節點。 在下面的例子中,我從一個節點開始,它與下一個節點相關,並且下一個節點通過相同的關係與另一個節點相關。返回開始和結束節點以獲取密碼關係列表

我嘗試了以下密碼查詢,但它不起作用。

start n=node:index('name:"iris"') 
match n-[r:childof*]->parent 
return startNode(r),endNode(r) 

任何想法?我會認爲對R的一個警告將會起作用,但似乎無法使這個工作成功。

+0

你是什麼意思「它不起作用?」怎麼了?哪個版本的Neo4j? – jjaderberg

回答

3

正如你不說,否則我假設你正在使用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],但只有當你明確地將它包含在你的模式中時,你才能相信這是代表關係的方向。

相關問題