Cypher查询可变长度路径

时间:2016-12-14 13:28:42

标签: neo4j cypher

我的Cypher查询如下所示:

match (n1:N1)-[r1:R1]->()<-[r2:R2*0..]-(n3)<-[r3:R3]-(n4) return *

由于可变长度关系(<-[r2:R2*0..]-)中的0,我希望此查询与以下内容相同(添加n2):

match (n1:N1)-[r1:R1]->(n2)<-[r2:R2*0..]-(n3)<-[r3:R3]-(n4) return *

但它们会返回截然不同的结果。 有人可以帮我理解为什么会这样吗? 是不是只允许0? 感谢。

1 个答案:

答案 0 :(得分:0)

您的第二个查询在第一个查询中没有变量,因此您的结果当然会有所不同,会有一个额外的列。

如果我们采用您第一个查询的相关片段:

(n1:N1)-[r1:R1]->()<-[r2:R2*0..]-(n3)

这意味着,从模式&#39;()&#39;中的未绑定节点,我们将遍历0或更多类型的关系:R2,结果节点将绑定到n3变量。因此,未绑定的节点将始终存在于n3列中,无论是否存在任何:R2关系存在以进行遍历。

您的第二个查询将产生非常相似的结果,每个列应匹配相同的数据,但有一个额外的列n2,它将始终与之前未绑定的节点匹配。该节点也将出现在n3列中。

如果这还没有解决问题,您可能希望更好地解释结果中的哪些内容对您没有意义,以及您认为0在查询中的作用(0肯定是允许的)在可变长度关系中)。