在应用程序启动时,我想确保存在索引和约束。
当我在应用程序启动时调用以下内容时,由于约束已经存在,我收到一个错误:
CREATE CONSTRAINT ON (node:MyLabel) ASSERT node.myProperty IS UNIQUE
我想确保约束存在而不会抛出错误。
有没有办法在 Cypher 中做到这一点?我正在努力在 Neo4J 文档中找到任何帮助。
最佳答案
不幸的是,Cypher 对此没有很好的支持,由于删除非断言索引和约束的副作用,即使是这里的 APOC 产品也不会很合适。
您必须对 call db.constraints()
和 call db.indexes()
的结果进行字符串解析。
更新
在 Neo4j 的最新版本中(不确定这是在什么时候改变的),如果尝试应用已经存在的约束,它不应该抛出任何错误。
此外,较新版本的 APOC 有一个新的 dropExisting
参数,它允许您在应用新索引/约束之前控制是删除还是保留现有模式。
关于Neo4J Cypher : Ensuring constraints exist (avoiding errors if they already do),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44049851/