2013-09-27 80 views
1

我有一個節點,關係,節點,關係,...集合的路徑。 我想查找與此路徑中所有節點有關的節點/節點。找到節點與集合中所有節點的關係

有人可以給示例查詢Cypher?

現在我有

START startNode=node(3), endNode=node(5) 
MATCH path=startNode-[:CONNECT*]->endNode 
WITH path, relationships(path) AS connections, nodes(path) AS nodes 

而問題是我不知道如何使用節點集合查找節點/與節點有關係,這個集合中的所有節點。該關係是鍵入的:CONTAINS,它從搜索節點到節點集合中的節點。集合中的所有節點都必須與搜索到的節點有關係。

回答

1

這是一個查詢,它應該返回具有指定起點和終點的路徑上具有關係[:CONTAINS]的節點集合到節點「midNode」的節點。它通過路徑將所需的「SearchingNode」分組。

START startNode=node(3), endNode=node(5) 
Match path=startNode-[:Connect*]->midNode-[:Connect*]->endNode, searchedNode-[:CONTAINS]->midNode 
Return distinct path, collect(searchedNode) as searchedNodes 

更新:應當注意的是,識別符「midNode」表示兩個指定的起始和由於變長的關係的結束節點之間的路徑上的每個節點[:連接*],它連接到起點和終點。具體來說,它表示離開始節點一步的節點('m1'),如本例中的startNode - [:Connect] - > m1 - [:Connect] - > ...-> endNode;和'm2',這是起始節點的兩個步驟,在這種情況下startNode - [:Connect] - () - [:Connect] - > m2 - [:Connect] - > ...-> endNode。事實上,匹配路徑將是一組路徑,每個路徑對應於startNode和endNode之間的一個節點。由於我們只需要路徑上所有中間節點的一條路徑,所以DISTINCT用於刪除重複路徑,並且搜索節點將按照路徑的關鍵字進行分組,因此,搜索節點的集合將是集合所有與startNode和endNode之間的路徑上的所有節點相關的節點。

+0

謝謝您的回覆,但這意味着如果一個節點與midNode [:CONTAINS]有關係,那麼它將被返回。下一個midNode不需要與這個searchedNode有這樣的關係。我想找到與路徑上所有節點有關係的節點,而不僅僅是一個midNode。 –

+0

不,標識符'midNode'代表路徑上的每個節點,而不僅僅是單個節點。我已經更新了答案,以便更清楚。試一試,看看它是否得到你想要的。 –

相關問題