Neo4j Cypher 递归遍历,直到特定节点



我正在尝试创建一个递归查询,该查询将从特定节点开始,但希望在到达特定节点时停止递归。

例如

(node{Id:1})-[Parent]->(node{Id:2})
(node{Id:2})-[Parent]->(node{Id:3})
(node{Id:3})-[Parent]->(node{Id:4})
....
....
(node{Id:99})-[Parent]->(node{Id:100})

现在我想从节点 3 遍历到节点 8。

我尝试了下面的查询,但它从节点 3 遍历到根节点(即节点 100)。

match  (c:node{Id:3})-[Parent*0..]->(p:node) retun p;

如何在此处设置条件以在到达节点 8 时停止遍历?

您也可以将Match 子句中的Id参数添加到第二个节点(此处为 p)。

MATCH path=(c:node{Id:3})-[Parent*0..]->(p:node{Id:8}) RETURN path;

您还可以在关系匹配中添加深度,例如[Parent*0..N]如果您知道 N 的确切值或最大值。

编辑:上面的查询返回从节点3到8的路径。如果仅查找从节点 3 到 8 的路径中的节点,则可以匹配路径并返回该路径上存在的节点。

MATCH path=(c:node{Id:3})-[Parent*0..]->(p:node{Id:8}) RETURN nodes(path);

最新更新