在我的数据库中,A
和B
之间有一种关系,名为awithb
。对于Cypher
MATCH ()-[:awithb]-() return count(*)
则返回140。
然而,如果我们给出节点的标签,
MATCH (:A)-[:awithb]-(:B) return count(*)
则返回70。
为什么这两个密码查询返回不同的结果?
Cypher是关于返回匹配模式的路径。
路径是节点和关系的有序序列,当没有指定方向,也没有指定标签时,这样的模式将使用相同的关系和相同的两个节点生成两条路径,只是路径中节点的顺序不同,然后在另一个方向遍历关系。
如果你给图案添加一个方向,那么只有一条路径是可能的:
MATCH ()-[:awithb]->()
RETURN count(*)
当您在查询中不添加标签时,意味着您想要具有该关系的ANY节点。
() - [: awithb] - () where () is any nodes
当你放置带有相应标签的无方向路径时;这意味着关系可以是从A到B或从B到A。
(:A) - [: awithb] - (:B) equals A->B OR A<-B
因此,在你的第一个查询中,你得到了2倍的计数,因为你得到了从A到B和B到A的路径。