首页 文章

在Neo4j中合并具有相同属性值的节点

提问于
浏览
0

当我搜索具有特定邮政编码的节点时:

MATCH (z:ZipCode) WHERE z.zipcode = "2014 AAE" RETURN z.zipcode

我得到重复:

z.zipcode
2014 AAE
2014 AAE

当我搜索某个邮政编码的关系时:

MATCH p=(z:ZipCode)-->() WHERE z.zipcode = "2014 AAE" RETURN p

我得到一个指向房屋节点的单个邮政编码节点 2014 AAE 518Q

如何合并具有相同属性值的zipcode节点,但保留zipcode的所有关系完整?

Edit:

在cybersam的回答后,我构建了一个查询 . 这是将节点与APOC结合的方法吗?

MATCH (z1:ZipCode)-->(), (z2:ZipCode)-->()
WHERE z1.zipcode = z2.zipcode
AND ID(z1) <> ID(z2)
WITH COLLECT([z1,z2]) AS zs
CALL apoc.refactor.mergeNodes(zs) YIELD node
RETURN node;

我得到这个错误:

Type mismatch: expected Collection<Node> but was Collection<Collection<Node>> (line 5, column 31 (offset: 160))
"CALL apoc.refactor.mergeNodes(zs) YIELD node"

1 回答

  • 2

    [更新]

    旁白:您有2个具有相同邮政编码的节点,但这些节点中只有一个具有关系 . 这解释了迄今为止的结果 .

    在neo4j 3.x中,您可以安装APOC plugin并使用 mergeNodes() 过程,该过程接受一组节点 . 它将第二个节点和最后一个节点的属性和关系合并到第一个节点上,并删除第二个节点到最后一个节点 .

    例如:

    MATCH (z:ZipCode)
    WHERE z.zipcode = "2014 AAE"
    WITH COLLECT(z) AS zs
    CALL apoc.refactor.mergeNodes(zs) YIELD node
    RETURN node;
    

相关问题