是否有一个cypher命令可以删除所有约束?
我知道我可以放弃特定的约束。
DROP CONSTRAINT ON (book:Book) ASSERT book.isbn IS UNIQUE
但是我希望在测试后清除所有约束作为拆解的一部分。在文档中找不到任何内容,但有类似的内容:
DROP CONSTRAINT *
更新:我的测试设置。
编写一个基于promise的小型nodejs密码客户端。我想测试在应用程序代码中定义唯一索引。
答案 0 :(得分:12)
注意使用APOC,您可以通过CALL apoc.schema.assert({}, {})
删除所有索引和约束。
答案 1 :(得分:6)
您可以通过对http://localhost:7474/db/data/schema/constraint/
和http://localhost:7474/db/data/schema/index
的GET请求获取所有索引和约束的列表。这是我在Ruby中的表现,也许它会让你知道如何在Node中做同样的事情。
c.after(:all) do
conn = Faraday.new(url: "http://localhost:7474")
response = conn.get('/db/data/schema/constraint/')
constraints = JSON.parse(response.body)
constraints.each do |constraint|
Neo4j::Session.query("DROP CONSTRAINT ON (label:`#{constraint['label']}`) ASSERT label.#{constraint['property_keys'].first} IS UNIQUE")
end
response = conn.get('/db/data/schema/index/')
indexes = JSON.parse(response.body)
indexes.each do |index|
Neo4j::Session.query("DROP INDEX ON :`#{index['label']}`(#{index['property_keys'].first})")
end
end
答案 2 :(得分:3)
以下是我在Python中的使用方法:
s = connection.get_session()
# Drop constraints / indices
for constraint in s.run("CALL db.constraints"):
s.run("DROP " + constraint[0])
感觉有点icky,我觉得约束应该是一个更好的支持。
答案 3 :(得分:1)
删除约束的唯一方法是在每个约束级别执行此操作。你可以用例如在Neo4j浏览器中:schema
获取所有约束的列表。我只是为此写一个简短的脚本。
答案 4 :(得分:1)
如果您使用node / javascript,则可以执行以下操作:
const { records } = await cypher(`CALL db.constraints`)
await Promise.all(records.map(record => {
cypher(`DROP CONSTRAINT ${record.get('name')}`);
}));
答案 5 :(得分:0)
以下是使用neo4jrb gem的助手:
class MigrationHeper
include Neo4j::Migrations::Helpers
def drop_all
execute("match (n) detach delete n;")
execute("call db.constraints").each do |constraint|
execute "drop " + constraint[:description]
end
end
end