提问者:小点点

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


在我的数据库中,AB之间有一种关系,名为awithb。对于Cypher

MATCH ()-[:awithb]-() return count(*)

它返回140。

但是,如果我们给出节点的标签,

MATCH (:A)-[:awithb]-(:B) return count(*)

它返回70。

为什么这两个密码查询返回不同的结果?


共2个答案

匿名用户

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的路径。