微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

由于 _id 上的约束冲突,无法复制节点

如何解决由于 _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

此链接解释了如何克隆节点和关系:https://neo4j-contrib.github.io/neo4j-apoc-procedures/3.5/graph-refactoring/clone-nodes/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。