neo4j合并2个或多个重复节点

neo4j合并2个或多个重复节点,neo4j,cypher,Neo4j,Cypher,我正在使用cypher手动输入neo4j db,因此容易出现错误,例如创建重复节点: 重复节点将分别与其他节点建立关系。 是否有用于合并这些节点的内置函数?还是我应该手动操作 听起来可能,但密码脚本很复杂: 获取每个重复节点的关系 使用正确的节点(给定节点id)重新创建它们(及其属性) 删除与重复节点的关系 最后删除重复的节点 为了避免将来出现这种情况,请查看Cypher中的关键字。 不幸的是,据我所知,Cypher(至今)中没有任何东西像: 匹配(n:MyNode),(m:M

我正在使用cypher手动输入neo4j db,因此容易出现错误,例如创建重复节点:

重复节点将分别与其他节点建立关系。 是否有用于合并这些节点的内置函数?还是我应该手动操作

听起来可能,但密码脚本很复杂:

  • 获取每个重复节点的关系
  • 使用正确的节点(给定节点id)重新创建它们(及其属性)
  • 删除与重复节点的关系
  • 最后删除重复的节点

    • 为了避免将来出现这种情况,请查看Cypher中的关键字。 不幸的是,据我所知,Cypher(至今)中没有任何东西像:

      匹配(n:MyNode),(m:MyNode)
      其中ID(n)ID(m)和
      道具(m)中的道具(n)和道具(n)中的道具(m)
      (…)删除(…)
      
      第三行的虚构功能道具不是Cypher语言的一部分,用户定义的功能还没有进入Neo4j

      如果不使用生产实例,最简单的方法可能是备份数据文件夹并尝试重新开始插入(使用合并)

      否则,您也可以尝试编写一个脚本来收集重复项并批量删除它们(下面是REST API的一个示例)。

      尝试以下操作:

      MATCH (n:MyNode),(m:MyNode),(o:OtherNode {id:123})
      WHERE n <> m
      MATCH (m)-[r:FOO]->()
      CREATE (n)-[r2:FOO]->(o)
      SET r2 = r
      DELETE r,m
      
      匹配(n:MyNode),(m:MyNode),(o:OtherNode{id:123})
      n m在哪里
      匹配(m)-[r:FOO]->()
      创建(n)-[r2:FOO]->(o)
      设置r2=r
      删除r,m
      
      我想你可以试试:

      apoc.refactor.mergeNodes(nodes, options)
      
      关系方面:

      apoc.refactor.mergeRelationships(rels, options)
      
      或:

      除了说“试试这个”之外,您能详细描述一下上面的代码片段在做什么以及它是如何工作的吗?
      apoc.refactor.mergeRelationships(rels, options)
      
      apoc.periodic.iterate(query, options)