在应用启动时,我想确保存在指示和限制。
当我在应用启动时调用以下内容时,由于约束已经存在,我收到错误:
CREATE CONSTRAINT ON (node:MyLabel) ASSERT node.myProperty IS UNIQUE
我希望确保约束存在而不会抛出错误。
有没有办法在Cypher中这样做?我很难在Neo4J文档中找到任何帮助。
答案 0 :(得分:3)
不幸的是,在Cypher中没有很好的支持,由于放弃了未声明的索引和约束的副作用,即使这里提供的APOC也不会很合适。
您必须使用字符串解析call db.constraints()
和call db.indexes()
的结果。
更新
在Neo4j的最新版本中(不确定在何时更改),如果尝试应用已存在的约束,则不应抛出任何错误。
此外,较新版本的APOC具有新的dropExisting
参数,允许您在应用新索引/约束之前控制是否删除或保留现有架构。
答案 1 :(得分:1)
您可以使用APOC Schema断言过程来创建索引和约束。结果将是indexLabel
和constraintLabel
集合中指定的一组索引/约束。
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