这更多的是一个“如何做”的问题,可以有不同的方法,但试图找到解决此要求的最高效和最有效的方法。
我有一个图表,其中有充当 fork 节点的节点,即它们生成两条路径,这些路径稍后在其他节点相遇,我知道 fork 节点的节点 ID 和属性(下面示例中的节点 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 再次相遇,那么我想让节点 B 知道节点 A,请建议我们如何在 Cypher 中做到这一点。
谢谢, 迪佩什
最佳答案
我假设您通过节点 a
的 id
属性知道它,并且它是 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
关于graph - Neo4J Cypher - 寻找两条路径的交汇点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27632962/