如何解决在ConstraintValidationFailed上进行Cypher Match-MERGE查询失败
我正在尝试使用Node
的Match-Merge查询和Relation
创建一个Unique Constraint
来避免节点重复。
我在Unique Constraint
标签上有C
作为财产名称:
| 11 | "c_name" | "ONLINE" | 100.0 | "UNIQUE" | "BTREE" | "NODE" | ["C"] | ["name"] | "native-btree-1.0" |
我正在使用此查询:
MATCH (n:N)
where id(n)=10
MERGE (n)-[r:Relates]->(c:C {name: "Test",parts: ["Test"]})
N
节点始终存在,但是节点C
可能不存在,我希望可以创建它。
当C
与重复的name
存在时出现此错误!
ConstraintValidationFailed: Node(373009) already exists with label `C` and property `name` = 'Test'
出什么问题了? Merge
查询不会使重复的Node被合并或跳过吗?
解决方法
如果整个模式还不存在,MERGE将尝试创建它。
所以,要么:
-
(c:C {name: "Test"})
已经存在,但是c.parts
与["Test"]
不同(或丢失),或者 -
(c:C {name: "Test",parts: ["Test"]})
已经存在,但与Relates
无关n
。
无论哪种情况,MERGE
都会继续尝试创建模式,从而导致约束冲突。
此查询可以避免这种情况:
MATCH (n:N)
WHERE ID(n) = 10
MERGE (c:C {name: "Test"})
ON CREATE SET c.parts = ["Test"]
MERGE (n)-[:Relates]->(c)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。