Neo4J Cypher:确保存在约束(如果已经存在则避免错误)

时间:2017-05-18 13:59:14

标签: neo4j cypher

在应用启动时,我想确保存在指示和限制。

当我在应用启动时调用以下内容时,由于约束已经存在,我收到错误:

CREATE CONSTRAINT ON (node:MyLabel) ASSERT node.myProperty IS UNIQUE

我希望确保约束存在而不会抛出错误。

有没有办法在Cypher中这样做?我很难在Neo4J文档中找到任何帮助。

3 个答案:

答案 0 :(得分:3)

不幸的是,在Cypher中没有很好的支持,由于放弃了未声明的索引和约束的副作用,即使这里提供的APOC也不会很合适。

您必须使用字符串解析call db.constraints()call db.indexes()的结果。

更新

在Neo4j的最新版本中(不确定在何时更改),如果尝试应用已存在的约束,则不应抛出任何错误。

此外,较新版本的APOC具有新的dropExisting参数,允许您在应用新索引/约束之前控制是否删除或保留现有架构。

答案 1 :(得分:1)

您可以使用APOC Schema断言过程来创建索引和约束。结果将是indexLabelconstraintLabel集合中指定的一组索引/约束。

CALL apoc.schema.assert({},{MyLabel:['myProperty']}) 
yield label, key, unique, action
RETURN *

答案 2 :(得分:0)

您可以使用 IF NOT EXISTS,例如:CREATE CONSTRAINT IF NOT EXISTS ON (node:MyLabel) ASSERT node.myProperty IS UNIQUE