у меня есть узел (a), я хочу создать новый узел (c) и связать его со всеми узлами, связанными с (a), с теми же старыми отношениями (a), которые связаны с другими узлами в графе??
Я попробовал следующий шифр:
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
)
Вы можете использовать процедуру APOC apoc.refactor.cloneNodesWithRelationships.
Например:
MATCH (a)
WHERE ID(a) = 42
CALL apoc.refactor.cloneNodesWithRelationships([a]) YIELD input, output
RETURN input, output
я понял, спасибо MATCH (a) WHERE ID(a) = 42 CALL apoc.refactor.cloneNodesWithRelationships([a]) YIELD input, output set output.name='xyz'
Вы можете попробовать запустить следующий запрос
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
Он создаст новый узел и соответствующие отношения, но это не общий запрос, и не будет копировать ярлыки и направления отношений. Для более универсального запроса лучше продублировать все с АПОК и потом изменить свойства созданного узла.
но результатом этого метода является та же копия узла, я хочу новый узел с настраиваемыми атрибутами с теми же отношениями.