我的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
?
感谢。
答案 0 :(得分:0)
您的第二个查询在第一个查询中没有变量,因此您的结果当然会有所不同,会有一个额外的列。
如果我们采用您第一个查询的相关片段:
(n1:N1)-[r1:R1]->()<-[r2:R2*0..]-(n3)
这意味着,从模式&#39;()&#39;中的未绑定节点,我们将遍历0或更多类型的关系:R2,结果节点将绑定到n3变量。因此,未绑定的节点将始终存在于n3列中,无论是否存在任何:R2关系存在以进行遍历。
您的第二个查询将产生非常相似的结果,每个列应匹配相同的数据,但有一个额外的列n2,它将始终与之前未绑定的节点匹配。该节点也将出现在n3列中。
如果这还没有解决问题,您可能希望更好地解释结果中的哪些内容对您没有意义,以及您认为0在查询中的作用(0肯定是允许的)在可变长度关系中)。