Neo4j Cypher:合并重复的节点

胡安·富恩特斯

我有一些重复的节点,都带有标签Tag。我重复的意思是我有两个具有相同name属性的节点,例如:

{ name: writing, _id: 57ec2289a90f9a2deece7e6d},
{ name: writing, _id: 57db1da737f2564f1d5fc5a1},
{ name: writing }

_id字段不再使用,因此在所有效果中,这三个节点都是相同的,只是每个节点具有不同的关系。

我想做的是:

  1. 查找所有重复的节点(检查)

    MATCH (n:Tag)
    WITH n.name AS name, COLLECT(n) AS nodelist, COUNT(*) AS count
    WHERE count > 1
    RETURN name, nodelist, count
    
  2. 将所有关系从重复节点复制到第一个

  3. 删除所有重复的节点

可以通过密码查询实现吗?还是我必须使用某种编程语言来编写脚本?(这就是我要避免的事情)

逆鹰

APOC程序具有一些有助于图形重构的程序我认为apoc.refactor.mergeNodes()应该做到这一点。

请注意,除了将所有关系从其他节点转移到列表的第一个节点上之外,它还将所有标签和属性从其他节点转移到第一个节点上。如果这不是您想要执行的操作,则可能必须从其他节点收集传入和传出的关系,并使用apoc.refactor.to()apoc.refactor.from()代替。

这是合并节点的查询:

MATCH (n:Tag)
WITH n.name AS name, COLLECT(n) AS nodelist, COUNT(*) AS count
WHERE count > 1
CALL apoc.refactor.mergeNodes(nodelist) YIELD node
RETURN node

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章