根据节点 属性 值向 neo4j 节点添加约束

Add constraints to neo4j node based on node property value

我正在使用 Cypher 约束向 neo4j 数据库添加约束,并希望创建一个仅适用于节点类型子集的约束。

我可以创建一个约束条件,即 foo 字段必须存在于 Entity

CREATE CONSTRAINT ON (e:Entity) ASSERT EXISTS (e.foo)

但是,我只想限制具有给定字段的节点。例如

CREATE CONSTRAINT ON (e:Entity {constrain_flag:true) ASSERT EXISTS (e.foo)

比如我可能有两个节点像

(e:Entity { foo: 'bar' , constrain_flag: true })

(e:Entity { constrain_flag: false })

我只希望 e.foo 必须存在的约束应用于 Entity,其中 constrain_flag = true,所以这两个都应该被允许。然而,

(e:Entity { constrain_flag: false }) 应该抛出异常。

目前有没有办法用 cypher 和 neo4j 做到这一点?

提前致谢!

而不是添加标志 属性,您可以只 add an additional label(比如,ConstrainedEntity)到 Entity 应该被约束的节点。查询可以继续仅使用 Entity 标签。

例如:

CREATE CONSTRAINT ON (ce:ConstrainedEntity) ASSERT EXISTS (ce.foo)

创建 "flagged" Entity:

CREATE (e:Entity:ConstrainedEntity {id: 111, foo: 'bar'})

到 "flag" 一个现有的 Entity:

MATCH (e:Entity)
WHERE e.id = 123
SET e:ConstrainedEntity