当与其他节点匹配时,Neo4J返回节点两次

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当与其他节点匹配时,Neo4J返回节点两次相关的知识,希望对你有一定的参考价值。

我想从两个具有一个共同节点的关系中获取值(2组值),然后返回所有集合。

我已经尝试过这个代码,但是对于第一个只有一个结果的集合,它会重复它,因为第二个集合有两个结果。

MATCH (sti:SingleTaskInstance) <- [:CONTAINS] - (cti:CollaborativeTaskInstance {cti_id: "RD1CT"}) 
- [:CONTAINS] -> (cti2:CollaborativeTaskInstance) return sti, cti2

这是结果

enter image description here

我们看到sti是重复的,而它应该只返回一个结果。

我也试过在集合上使用collect(distinct sti)我不想复制,但它仍然无法正常工作。任何建议都受到欢迎。

答案

在Cypher中,您将获得一系列结果,具体取决于与模式匹配的所有可能路径。在您的情况下,找到了两个匹配模式的路径,但它们碰巧具有相同的sti节点,这就是为什么您看到它出现两次。这是设计的。结果没有隐式分组,您需要使用聚合函数自己完成。

如果你想为每个不同的sti节点收集cti节点,那么你需要像这样收集():

MATCH (sti:SingleTaskInstance) <- [:CONTAINS] - (cti:CollaborativeTaskInstance {cti_id: "RD1CT"}) - [:CONTAINS] -> (cti2:CollaborativeTaskInstance)
RETURN sti, collect(DISTINCT cti2)

我们正在收集不同的cti2节点,以防多个cti节点可以访问cti2节点(否则它可能会出现多次)。聚合时,非聚合变量变得不同,因此您将通过聚合获得不同的sti节点。

以上是关于当与其他节点匹配时,Neo4J返回节点两次的主要内容,如果未能解决你的问题,请参考以下文章

使用密码删除neo4j中的所有节点和关系超出堆空间

使用 Cypher 从 Neo4j 图中提取子图

neo4j cypher - 匹配不存在相同类型的另一个特定节点的节点

优化 Neo4j 磁盘使用

知识图谱Neo4j Cypher查询语言详解

Neo4j怎么判断节点的属性的类型