密码:合并具有相同属性和不同关系的两个节点

时间:2019-03-07 13:09:56

标签: neo4j cypher

可以说,我有两个具有相同标签和相同属性值的节点:

Create (n:A {foo: 'bar'});
Create (m:A {foo: 'bar'});

我还有其他一些节点:

Create(o:B {test: 'test'});
Create(p:C {other: 'other'});

我从第一个节点到其他节点都有关系:

Match (n:A {foo: 'bar'}), (o:B {test: 'test'}) MERGE (n)-[:r]-(o);
Match (m:A {foo: 'bar'}), (p:C {other: 'other'}) MERGE (m)-[:s]-(p);

所以我得到一个如图所示的图形:

example graph

现在,我想将A类型的两个节点合并到一个节点,并保持两种关系。所以我想得到一个如图所示的图形:

new, combined example graph

是否有密码查询可以做到这一点?尤其是要对具有相同属性属性的一种类型的所有节点执行此操作?

1 个答案:

答案 0 :(得分:1)

我们在 APOC 中有一个程序可以做到:apoc.refactor.mergeNodes

这是文档的链接:https://neo4j-contrib.github.io/neo4j-apoc-procedures/#merge-nodes

为您的示例提供解决方案:

MATCH (n:A {foo: 'bar'})
WITH collect(n) AS nodes
  CALL apoc.refactor.mergeNodes(nodes, {properties:"override", mergeRels:true}) yield node
  RETURN node