我正在尝试创建一个递归查询,该查询将从特定节点开始,但希望在到达特定节点时停止递归。
例如
(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);