如何解决Neo4J Cypher:Match ()-[]-() Return count(*) 返回未分配节点标签时关系数的两倍
在我的数据库中,A
和 B
之间存在一种名为 awithb
的关系。
对于密码
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 的路径。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。