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

Neo4J Cypher:Match()-[]-()返回计数(*)在未分配节点标签时返回两倍的关系数,neo4j,cypher,Neo4j,Cypher,在我的数据库中,a和B之间存在一种关系,命名为awithb。 密码 MATCH ()-[:awithb]-() return count(*) 它返回140 但是如果我们给出节点的标签 MATCH (:A)-[:awithb]-(:B) return count(*) 它返回70 为什么这两个cypher查询返回不同的结果?cypher是关于返回匹配模式的路径 路径是有序的节点和关系序列,如果没有指定方向,也没有指定标签,那么这样的模式将使用相同的关系和相同的两个节点生成两条路径,只是路径中

在我的数据库中,
a
B
之间存在一种关系,命名为
awithb
。 密码

MATCH ()-[:awithb]-() return count(*)
它返回140

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

MATCH (:A)-[:awithb]-(:B) return count(*)
它返回70


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

cypher是关于返回匹配模式的路径

路径是有序的节点和关系序列,如果没有指定方向,也没有指定标签,那么这样的模式将使用相同的关系和相同的两个节点生成两条路径,只是路径中节点的顺序不同,然后你在另一个方向上遍历关系

如果向阵列添加方向,则只能有一条路径:

MATCH ()-[:awithb]->() 
RETURN count(*)

当您在查询上不放置标签时,这意味着您需要具有该关系的任何节点

 () - [: awithb] - ()  where () is any nodes 
放置带有相应标签的非定向路径时;这意味着关系可以是从A到B或B到A

 (:A) - [: awithb] - (:B) equals  A->B  OR  A<-B

(:A)-[:awithb]-(:B)等于A->B或A而不带标签,两个节点不可能匹配关系的任何一方吗?您不指定任何方向性,也不指定每侧的节点类型…谢谢!这是否意味着
匹配(:A)-[:awithb]-(:B)返回计数(*)
匹配(:A)-[:awithb]->(:B)返回计数(*)
返回相同的结果?不一定。如果创建的关系指向:A节点,则计数将不匹配。Neo4j中的所有关系都是定向的。如果方向对您很重要,那么您可以将其包含在匹配模式中,否则忽略方向将匹配任何方向的REL。