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

时间:2019-03-12 09:21:28

标签: 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时如何在此处设置条件以停止遍历?

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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