我想从具有一个节点相同的两个关系中获取值(2组值),然后返回所有组。
我尝试过这段代码,但是对于只有一个结果的第一个集合,由于第二个集合具有两个结果,所以它会重复它。
MATCH (sti:SingleTaskInstance) <- [:CONTAINS] - (cti:CollaborativeTaskInstance {cti_id: "RD1CT"})
- [:CONTAINS] -> (cti2:CollaborativeTaskInstance) return sti, cti2
这是结果
我们看到 sti 是重复的,但它只能返回一个结果。
我也尝试过在不想复制的集合上使用collect(distinct sti),但仍然无法正常工作。任何建议都欢迎。
答案 0 :(得分:1)
在Cypher中,您将获得结果行,具体取决于匹配模式的所有可能路径。在您的情况下,找到了两个与模式匹配的路径,但是它们都碰巧具有相同的sti节点,这就是为什么您看到它出现两次的原因。这是设计使然。结果不是隐式分组的,您需要使用聚合函数自己进行操作。
如果要在每个单独的sti节点上收集cti节点,则需要像以下这样进行collect():
MATCH (sti:SingleTaskInstance) <- [:CONTAINS] - (cti:CollaborativeTaskInstance {cti_id: "RD1CT"}) - [:CONTAINS] -> (cti2:CollaborativeTaskInstance)
RETURN sti, collect(DISTINCT cti2)
我们正在收集不同的cti2节点,以防多个cti节点可以到达一个cti2节点(否则它可能出现多次)。聚合时,非聚合变量变得不同,因此借助聚合,您将获得不同的sti节点。