如何避免Neo4j Cypher查询返回结果中的重复节点问题
解决Cypher查询重复开放三角的问题
要避免同一个开放三角被重复记录(比如节点A作为x时包含节点B,节点B作为x时又包含节点A),可以通过添加节点ID的比较条件来确保每个无序节点对只被匹配一次。
修改后的查询
MATCH (x:Birth)-[:SIBLING]-(y:Birth)-[:SIBLING]-(z:Birth) WHERE NOT (x)-[:SIBLING]-(z) AND id(x) < id(z) RETURN x, collect([y, z]) AS openTriangles
原理说明
id(x) < id(z)这个条件会确保每个无序的(x,z)节点对只会被匹配一次:当x的ID小于z的ID时才保留这条记录,反之则过滤掉。这样就不会出现x=789时包含123的重复情况,因为123的ID更小,只会在x=123的行里记录这个三角。- 如果希望以ID更大的节点作为x来记录三角,只需把条件改成
id(x) > id(z)即可,这样123和22的情况会保留x=123的记录,过滤x=22的记录。 - 若你的节点有业务层面的唯一标识(比如
birthId),建议用该属性代替内部ID(id()),避免因节点重建导致ID变化的问题,例如:x.birthId < z.birthId。
内容的提问来源于stack exchange,提问作者aisaev
相关产品推荐
相关产品推荐

