创建具有相同关系的重复节点

时间:2019-04-09 01:03:29

标签: neo4j cypher

我有一个节点(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
)

2 个答案:

答案 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复制所有内容,然后再更改所创建节点的属性。

相关问题