neo4j如何放弃所有约束

时间:2014-03-12 16:10:17

标签: neo4j cypher

是否有一个cypher命令可以删除所有约束?

我知道我可以放弃特定的约束。

DROP CONSTRAINT ON (book:Book) ASSERT book.isbn IS UNIQUE

但是我希望在测试后清除所有约束作为拆解的一部分。在文档中找不到任何内容,但有类似的内容:

DROP CONSTRAINT *

更新:我的测试设置。

编写一个基于promise的小型nodejs密码客户端。我想测试在应用程序代码中定义唯一索引。

6 个答案:

答案 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