Создание дублирующего узла с одинаковыми отношениями - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть узел (а), я хочу создать новый узел (с) и связать его со всеми узлами, связанными с (а), с такими же старыми отношениями (а), связанными с другими узлами в графе ??

я попробовал следующий шифр:

MATCH (a)-[r]-(b) where ID(a)=  42
WITH COLLECT(r) AS rels, a, b
create (c) set c.name='علامات'
FOREACH (rel in rels |
       CREATE (b)-[r:LINKED_TO]->(c)
       SET r+=rel
)

, но он создал несколько (c) узлов, а не только один.

я попробовал шифр ниже, но он создал несколько (c) узловс новыми отношениями не только один узел.

MATCH (a)-[r]-(b) where ID(a)=  42
WITH COLLECT(r) AS rels, a, b
create (c) set c.name='علامات'
FOREACH (rel in rels |
       CREATE (b)-[r:LINKED_TO]->(c)
       SET r+=rel
)

Ответы [ 2 ]

0 голосов
/ 09 апреля 2019

Вы можете попытаться выполнить следующий запрос

CREATE (clone {name: "علامات"})
WITH clone
MATCH (a)-[r]-(b) where ID(a)=  42
WITH COLLECT(r) AS rels, collect(b) as nodes, clone
WITH rels, nodes, clone, range(0, size(rels)-1) AS indexes
UNWIND indexes AS i
WITH clone, rels[i] as rel, nodes[i] as relNode
create (clone)-[nr:LINKED_TO]->(relNode) SET nr += rel

Это создаст новый узел, соответственные отношения, но это не общий запрос, , и он не будет копировать метки и направлениеотношения .Для более универсального запроса лучше продублировать все с помощью APOC и впоследствии изменить свойства созданного узла.

0 голосов
/ 09 апреля 2019

Вы можете использовать процедуру APOC apoc.refactor.cloneNodesWithRelationships .

Например:

MATCH (a)
WHERE ID(a) = 42
CALL apoc.refactor.cloneNodesWithRelationships([a]) YIELD input, output
RETURN input, output
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...