由于 _id 上的约束违反,无法复制节点

Cannot duplicate node due to constraint violation on an _id

我们正在尝试在对 属性 _id

具有重复约束的标签上克隆节点
MATCH (s:part{_id:'aaaaa'})
CREATE (newNode:part)
SET newNode = s, newNode._id = 'bbbbb'
RETURN  newNode

我们得到

Node(52) already exists with label `part` and property `_id` = 'aaaaa'

如何克隆一个节点只是改变约束属性?

我们可以使用地图而不是节点变量作为要设置的属性的来源。

使用map projection,我们可以让该映射获取第一个节点的所有属性,并有选择地覆盖我们想要替换的属性。

MATCH (s:part{_id:'aaaaa'})
CREATE (newNode:part)
SET newNode = s {.*, _id:'bbbbb'}
RETURN  newNode

您可以像这样使用 apoc.refactor.cloneNodes 克隆节点:

MATCH (s:part{_id:'aaaaa'}) WITH s CALL apoc.refactor.cloneNodes([s]) yield input, output RETURN *

此查询将克隆没有唯一属性的节点,因此您必须稍后设置该属性:

MATCH (copy:part) WHERE not exists(copy._id) SET copy._id='bbbbb' RETURN copy

此 link 说明如何克隆节点和关系:https://neo4j-contrib.github.io/neo4j-apoc-procedures/3.5/graph-refactoring/clone-nodes/