我有一个节点(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
)
答案 0 :(得分:0)
您可以使用APOC过程apoc.refactor.cloneNodesWithRelationships。
例如:
MATCH (a)
WHERE ID(a) = 42
CALL apoc.refactor.cloneNodesWithRelationships([a]) YIELD input, output
RETURN input, output
答案 1 :(得分:0)
您可以尝试运行以下查询
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复制所有内容,然后再更改所创建节点的属性。