Neo4J:如何找到从节点开始到具有特定标签的第一个节点的所有路径

问题描述 投票:0回答:2

希望你能帮助我,所以基本上我正在寻找一种方法来查找所有路径,直到某个标签的第一个节点(查询应该探索一个节点的所有路径,并在具有特定标签的节点时停止)发现)。

我有两个标签(A 和 B)

假设我们有以下连接

A1>B1>B2>A2>B6>A6
A1>A4>A5 
A1>B3>A3>B8>A7

我想知道如何返回从 A1 开始到标签 A 的第一个节点的路径,因此输出应该是这样的:

A1>B1>B2>A2
A1>A4
A1>B3>A3

图表截图如下

我寻找的结果应该如下所示

提前致谢

neo4j cypher neo4j-apoc
2个回答
1
投票

使用可变长度路径匹配。它告诉您可以通过任意数量 (*) 的跳转从 A 点导航到 A2 点。

https://neo4j.com/docs/cypher-manual/current/syntax/patterns/#cypher-pattern-varlength

 MATCH p1=(a1:A1)-[*]-(:A2)
 MATCH p2=(a1)-[*]-(:A4)
 MATCH p3=(a1)-[*]-(:A3)
 RETURN p1, p2, p3

节点 B 也将包含在路径 (p1, p2, p3) 中,因此无需在查询中添加它。


0
投票

匹配路径=(开始)-[r *]->(结束:

A
) WHERE start.name='A1' 以开始、结束、节点(路径)作为路径 where all(x in path where (id(x)=id(start)) or (id(x)=id(end)) or (all( la in labels(x) where la<>'A' ))) 返回起点、终点、路径;

参考:https://blog.csdn.net/aofavx/article/details/134708781

© www.soinside.com 2019 - 2024. All rights reserved.