Cypher Match-MERGE 查询在 ConstraintValidationFailed 上失败
Cypher Match-MERGE query fails on ConstraintValidationFailed
我正在尝试使用带有 Unique Constraint
的 Match-Merge 查询创建带有 Relation
的 Node
以避免重复节点。
我在 C
标签上有 Unique Constraint
属性 姓名:
| 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
查询不会合并或跳过重复的节点吗?
如果整个模式尚不存在,MERGE 将尝试创建它。
所以,要么:
(c:C {name: "Test"})
已存在,但 c.parts
与 ["Test"]
不同(或缺失),或
(c:C {name: "Test", parts: ["Test"]})
已经存在,但与 n
. 没有 Relates
关系
无论哪种情况,MERGE
都会继续尝试创建模式,从而导致违反约束。
这个查询可以避免这种情况:
MATCH (n:N)
WHERE ID(n) = 10
MERGE (c:C {name: "Test"})
ON CREATE SET c.parts = ["Test"]
MERGE (n)-[:Relates]->(c)
我正在尝试使用带有 Unique Constraint
的 Match-Merge 查询创建带有 Relation
的 Node
以避免重复节点。
我在 C
标签上有 Unique Constraint
属性 姓名:
| 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
查询不会合并或跳过重复的节点吗?
如果整个模式尚不存在,MERGE 将尝试创建它。
所以,要么:
(c:C {name: "Test"})
已存在,但c.parts
与["Test"]
不同(或缺失),或(c:C {name: "Test", parts: ["Test"]})
已经存在,但与n
. 没有
Relates
关系
无论哪种情况,MERGE
都会继续尝试创建模式,从而导致违反约束。
这个查询可以避免这种情况:
MATCH (n:N)
WHERE ID(n) = 10
MERGE (c:C {name: "Test"})
ON CREATE SET c.parts = ["Test"]
MERGE (n)-[:Relates]->(c)