簡體   English   中英

Neo4J Cypher - 尋找兩條路徑的交匯點

[英]Neo4J Cypher - finding meeting point of two paths

這更像是一個“如何”的問題,可能有不同的方法,但試圖找到最有效和最有效的方法來解決這個要求。

我有一個圖表,其中有節點作為fork節點,即它們產生兩個路徑,這些路徑后來在其他節點相遇,我知道fork節點的節點id和屬性(下面的例子中的Node A)並且想要知道兩條路徑相遇的節點(前面的節點B)。

注 - 這些路徑可以是可變長度的,即一個可以有6個節點而另一個只有2個節點,例如

NodeA -[]-> Node 1 -[]-> Node 2 -[]-> Node 3 -[]-> Node 4 -[]-> Node 5 -[]-> Node 6 -[]-> Node B -[]-> Node C -[]-> Node D -[]-> Node E
NodeA -[]-> Node 7 -[]-> Node 8 -[]-> Node B -[]-> Node C -[]-> Node D -[]-> Node E

因此,如果您看到節點A生成兩個路徑,最終在節點B處再次相遇,那么我想讓Node B知道節點A,請提示我們如何在Cypher中執行此操作。

謝謝,Deepesh

我將假設您通過它的id屬性知道節點a並且它是1234 您也可以在此處使用標簽。 我不確定你是否使用它們,所以我把它們排除了。

MATCH
  (a)-[*1..10]->(b),
  (a)-[*1..10]->(b)
WHERE a.id = 1234
RETURN b

您也可以返回路徑的長度,但這應該可以得到結果。 另請注意,您可以調整路徑的最大長度(在此示例中為10 )作為查詢性能的權衡(取決於圖形的結構)

編輯:

此外,如果這不起作用,您可能需要這樣做:

MATCH
  path1 = (a)-[*1..10]->(b),
  path2 = (a)-[*1..10]->(b)
WHERE a.id = 1234 AND path1 <> path2
RETURN b

我的問題的答案如下(感謝Brian - 用LIMIT 1更新他的答案)

MATCH
path1 = (a)-[*1..10]->(b),
path2 = (a)-[*1..10]->(b)
WHERE a.id = 1234 AND path1 <> path2
RETURN b LIMIT 1

添加LIMIT 1僅返回交叉點節點,否則它也返回交叉點節點后面的所有節點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM