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