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

问题描述 投票:0回答:1

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

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

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

这是结果

enter image description here

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

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

neo4j cypher
1个回答
1
投票

在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节点。

© www.soinside.com 2019 - 2024. All rights reserved.