【发布时间】:2020-04-08 05:31:14
【问题描述】:
假设我在 Neo4j 中有两个标签 A、B。是否可以创建类似以下的内容?
创建 A.property1 和 B.property2 唯一的约束。
【问题讨论】:
标签: neo4j constraints graph-databases
假设我在 Neo4j 中有两个标签 A、B。是否可以创建类似以下的内容?
创建 A.property1 和 B.property2 唯一的约束。
【问题讨论】:
标签: neo4j constraints graph-databases
不,约束仅在一个标签上。
如果您决定创建一些新标签,例如 :A_B,那么您可以断言它的 property1、property2 属性充当node key constraint,尽管这只是一个企业功能。
【讨论】:
虽然无法创建跨多个节点的唯一性约束,但这里有一个 Cypher 查询,它显示了一种方法,您可以在创建节点之一之前执行跨 2 个节点的唯一性测试(如果适用):
OPTIONAL MATCH (a:A), (b:B)
WHERE a.property1 = $p1 AND b.property1 = $p2
FOREACH(x IN CASE WHEN a IS NULL THEN [1] END |
MERGE (a:A {property1: $p1}))
查询假定p1 和p2 作为parameters 传入。如果 a.property1 = $p1 或 b.property1 = $p2 为假,则 a 在 WHERE 子句之后将为空。因此,如果多节点唯一性测试失败,FOREACH 子句将仅创建(如有必要,通过MERGE 子句)其中一个节点。 MERGE 用于避免创建该节点(如果该节点已存在)。
【讨论】: