当与其他节点匹配时,Neo4J返回节点两次
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当与其他节点匹配时,Neo4J返回节点两次相关的知识,希望对你有一定的参考价值。
我想从两个具有一个共同节点的关系中获取值(2组值),然后返回所有集合。
我已经尝试过这个代码,但是对于第一个只有一个结果的集合,它会重复它,因为第二个集合有两个结果。
MATCH (sti:SingleTaskInstance) <- [:CONTAINS] - (cti:CollaborativeTaskInstance {cti_id: "RD1CT"})
- [:CONTAINS] -> (cti2:CollaborativeTaskInstance) return sti, cti2
这是结果
我们看到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返回节点两次的主要内容,如果未能解决你的问题,请参考以下文章