【问题标题】:Add constraints to neo4j node based on node property value根据节点属性值向neo4j节点添加约束
【发布时间】:2020-05-29 14:43:18
【问题描述】:

我正在使用 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 做到这一点?

提前致谢!

【问题讨论】:

    标签: neo4j cypher constraints


    【解决方案1】:

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

    例如:

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

    创建一个“标记”Entity

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

    “标记”现有的Entity

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

    【讨论】:

    • 哇,我不知道你可以嵌套这样的节点类型。太棒了,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-03
    • 1970-01-01
    • 2013-06-11
    相关资源
    最近更新 更多