如何防止 Neo4j Cypher 查询返回重复节点

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

我有这个查询来查找节点之间缺失的链接

MATCH (x:Birth)-[:SIBLING]-(y:Birth)-[:SIBLING]-(z:Birth)
WHERE NOT (x)-[:SIBLING]-(z)
RETURN x, collect([y, z]) AS openTriangles

有时,当我运行它时,同一节点可能位于 x 一行,而 z 位于另一行。这是一个例子。想象一下这些数字是节点 ID

x=123, openTraingles=\[\[456, 789\], \[456, 22\]\]
x=789, openTraingles=\[\[456, 123\]\]

如果节点 123 已显示为 x,则它不应出现在 openTriangles 中,因为它是重复的三角形。我该如何修改查询来解决这个问题?

我尝试过但意识到我不能使用 id() < id() as some nodes in openTriangle can have a lower id than x, as can be seen with node 123 and 22.

neo4j cypher
1个回答
0
投票

您应该返回每个

y
及其不同排序的
x/z
对的集合:

MATCH (x:Birth)-[:SIBLING]-(y:Birth)-[:SIBLING]-(z:Birth)
WHERE NOT (x)-[:SIBLING]-(z)
RETURN y, COLLECT(DISTINCT apoc.coll.sort([x, z])) AS openTriangles
© www.soinside.com 2019 - 2024. All rights reserved.