How to merge nodes that have the same value for name property in Neo4j

拜拜、爱过 提交于 2019-12-05 07:40:41

Your name values have different values because of upper and lower case letters ("Java" and "java" are different).

I reproduced your scenario creating a sample data set:

CREATE (n1:Node {name : "Java"}),
(n2:Node {name : "Java"}),
(n3:Node {name : "java"}),
(n1)-[:TYPE]->(),
(n1)-[:TYPE]->(),
(n1)-[:TYPE]->(),
(n2)-[:TYPE]->(),
(n2)-[:TYPE]->(),
(n3)-[:TYPE]->()

The above query will produce this graph:

To merge all "Java" nodes you can use the APOC Procedure apoc.refactor.mergeNodes(nodes). Running the following query:

MATCH (n:Node)
// using toLower function to group nodes with the same name but 
// different cases (eg Java, java, javA)
WITH toLower(n.name) as name, collect(n) as nodes
// passing the nodes collection to mergeNodes APOC procedure
CALL apoc.refactor.mergeNodes(nodes) yield node
RETURN *

Will update your graph to:

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!