cypher: объединить два узла с одинаковыми атрибутами и разными отношениями - PullRequest
2 голосов
/ 07 марта 2019

Допустим, у меня есть два узла с одинаковой меткой и одинаковыми значениями атрибута:

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 Ответ

1 голос
/ 07 марта 2019

У нас есть процедура в APOC , чтобы сделать это: apoc.refactor.mergeNodes

Это ссылка на документацию: https://neo4j -contrib.github.io / neo4j-apoc-процедуры / # слияния-узлы

И решение для вашего примера:

MATCH (n:A {foo: 'bar'})
WITH collect(n) AS nodes
  CALL apoc.refactor.mergeNodes(nodes, {properties:"override", mergeRels:true}) yield node
  RETURN node
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...