Neo4J Cypher:Match()-[]-()返回计数(*)在未分配节点标签时返回关系数的两倍



在我的数据库中,AB之间有一种关系,名为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的路径。

最新更新