Объединить два подграфа в neo4j - PullRequest
0 голосов
/ 05 мая 2020

У меня есть два подграфа следующим образом

                      (root1)                    (root2)
                       / | \                      / | \
                      /  |  \                    /  |  \
                     /   |   \                  /   |   \
                   (a1) (a2) (a3)             (b1) (b2) (b3)

Я хочу создать новый граф путем объединения двух вышеупомянутых

                               (root)
                          /  /  /  \  \  \
                       (a1)(a2)(a3)(b1)(b2)(b3)

Есть ли способ просто заменить один из root узлов в одном из деревьев вместо повторения всех дочерних узлов одного дерева, отключите текущий root и подключитесь к новому root?

Ответы [ 3 ]

0 голосов
/ 05 мая 2020
• 1000
0 голосов
/ 05 мая 2020

Вы можете использовать apo c .refactor.mergeNodes , чтобы «объединить» узлы в списке узлов с первым узлом в списке, что включает, по сути, «перемещение» всех отношений в первый узел. Вы должны прочитать о доступных мощных опциях, чтобы получить желаемые результаты.

Вот очень простой пример. Этот запрос объединит root2 в root1 (перезаписав все свойства в root1, имеющие то же имя, что и свойство в root2), и по существу «переместит» все свойства root2 в root1:

MATCH (root1), (root2)
WHERE root1.id = 123 AND root2.id = 234
CALL apoc.refactor.mergeNodes([root1, root2], {}) YIELD node
RETURN node

Вы можете указать параметры на карте {}, чтобы изменить приведенное выше поведение по умолчанию.

0 голосов
/ 05 мая 2020

В этом сценарии вам нужно будет отключить отношения от одного из узлов root, чтобы иметь возможность присоединить его к другому

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...