如何从节点查找所有路径

时间:2019-10-11 00:16:52

标签: neo4j cypher

我是neo4j的新手,我已经阅读了一些教程,但是我一直坚持寻找从一个节点开始的所有路径,直到状态变化时每次到达另一个路径为止。

我拍了张照片: https://imgur.com/B0q4SM0

从顶部的节点开始,我想找到所有状态为1的节点T,我们从类型为O的节点移动到关系为“ o”的T,从类型为T的节点移动到具有“ i”关系的O 。如果我们到达状态为0的节点T,则进入“ i”关系,并检查T状态是否为1,以此类推

我不知道图表的深度。我在手册上发现可以使用[r * 1 ..],但是我不确定如何在这里使用。

我尝试过

match (o1:O)-[:o]-(t:T), (t)-[:i]-(o2:O)-[:o]-(t2:T) 
return o1, t, o2, t2

第一个深度,但是我不知道如何用未知深度做,只要状态不为1,就可以更深入

1 个答案:

答案 0 :(得分:0)

您的架构看起来像这样(问号表示我不确定您在那里想要什么关系)。 (:O)<-[:o]-(:T)<-[:i]-(:O)<-[:o]-(:T)<-[:?]-(:T)

您需要以某种方式标识从其开始的第一个节点,并且我不确定您要从架构中获取的确切节点,但是类似这样的操作将返回状态为1的所有节点第一个节点,这里只是通过状态0进行标识(因此实际上可能不止一个节点)。

MATCH (firstnode:O {Status: 0})<-[:o|:i*..]-(othernodes) WHERE othernodes.Status=1 RETURN othernodes

但是请注意-任何* ..命令都将永远运行。