是否可以在 neo4j 的多个节点上跨多个属性创建唯一约束?

Is it possible to create unique constraint accross multiple properties over multiple nodes in neo4j?

假设我在 Neo4j 中有两个标签 A、B。是否可以创建如下内容?

创建 A.property1 和 B.property2 唯一的约束。

不,约束只针对一个标签。

如果您决定创建一些新标签,例如: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}))

查询假定 p1p2 作为 parameters 传入。如果 a.property1 = $p1b.property1 = $p2 为假,则 a 将在 WHERE 子句之后为空。因此,如果多节点唯一性测试失败,FOREACH 子句将仅创建(如有必要,通过 MERGE 子句)这些节点之一。 MERGE 用于避免创建该节点(如果它已经存在)。