我有这个查询来查找节点之间缺失的链接
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.
您应该返回每个
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