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