如果确实存在Neo4j丢弃约束

时间:2017-04-12 14:55:59

标签: neo4j cypher neo4j-bolt

只有通过查询存在约束时,是否有任何方法可以删除约束?我正在使用javascript的bolt驱动程序。

我最初认为我会抓住错误,但我得到的错误不够明确:

{"code":"Neo.DatabaseError.Schema.ConstraintDropFailed"}
{ Error: An unexpected failure occurred, see details in the database logs, reference number .... }

在日志中我确实得到了:

Unable to drop CONSTRAINT ... No such constraint CONSTRAINT

但我不想以编程方式打开日志并解析它。

是否有任何方法只有在存在时才删除约束?我没有找到任何有用的东西。

我唯一能想到的是首先尝试创建两个与约束冲突的节点(返回更明确的错误),但我更喜欢更清洁的东西。

1 个答案:

答案 0 :(得分:0)

如果您知道所需的所有索引和约束,则可以使用apoc过程apoc.schema.assert使它们存在,并删除所有其他现有索引和约束。

如何使用此过程的示例是此doc section的一部分。这是一个片段,显示对过程和结果的调用:

Let’s create some indexes and constraints, note that other indexes and constraints will be dropped by this.

CALL apoc.schema.assert(
  {Track:['title','length']},
  {Artist:['name'],Track:['id'],Genre:['name']});

╒════════════╤═══════╤══════╤═══════╕
│label       │key    │unique│action │
╞════════════╪═══════╪══════╪═══════╡
│Track       │title  │false │CREATED│
├────────────┼───────┼──────┼───────┤
│Track       │length │false │CREATED│
├────────────┼───────┼──────┼───────┤
│Artist      │name   │true  │CREATED│
├────────────┼───────┼──────┼───────┤
│Genre       │name   │true  │CREATED│
├────────────┼───────┼──────┼───────┤
│Track       │id     │true  │CREATED│
└────────────┴───────┴──────┴───────┘