apoc.schema.assert

  • 此过程不建议在多线程中运行,因此并行运行时(Parallel runtime)不支持该过程。有关更多信息,请参阅 Cypher 手册 → 并行运行时

  • 在 APOC 2025.07 版本发布之前,此过程在本地实例上受到限制。若要在旧版本上使用它,必须解除限制。有关详细信息,请参阅 安装 → 加载和解除限制

详细信息

语法

apoc.schema.assert(indexes, constraints [, dropExisting ]) :: (label, key, keys, unique, action)

描述

dropExistingtrue(默认值为 true)时,删除所有其他现有的索引和约束。在操作结束时断言给定的索引和唯一约束均已存在。

输入参数

名称

类型

描述

indexes

MAP

一个将标签与属性列表配对的映射,用于从中创建索引。

constraints

MAP

一个将标签与属性列表配对的映射,用于从中创建约束。

dropExisting

布尔值 (BOOLEAN)

是否删除所有其他现有的索引和约束。默认值为:true

返回参数

名称

类型

描述

标签 (label)

ANY

与约束或索引关联的标签。

键 (key)

STRING

与约束或索引关联的属性键。

keys

LIST<STRING>

与约束或索引关联的属性键。

unique

布尔值 (BOOLEAN)

这是否为唯一性约束。

action(动作)

STRING

应用于此约束或索引的操作;可以是 ["KEPT", "CREATED", "DROPPED"]

使用示例

CALL apoc.schema.assert({
  Person: ["id"]
}, {
  Person: ["name"]
});

我们可以通过运行以下查询,在 :Person(name) 上创建一个唯一性约束,并在 :Person(id) 上创建一个索引

结果
标签 (label) 键 (key) keys unique action(动作)

"Person"

"id"

["id"]

FALSE

"CREATED"

"Person"

"name"

["name"]

TRUE

"CREATED"

我们可以通过运行以下查询来删除所有约束和索引。请注意,取消机制不考虑 LOOKUP 类型的索引和多令牌索引,即适用于多种关系类型或多种标签的索引,例如 CREATE FULLTEXT INDEX titlesAndDescriptions FOR (n:Movie|Book) ON EACH [n.title, n.description]CREATE FULLTEXT INDEX fullIdxRel FOR ()-[r:TYPE_1|TYPE_2]-() ON EACH [r.alpha, r.beta]。这是因为它们无法通过 apoc.schema.assert 过程重新创建。

CALL apoc.schema.assert({}, {});
结果
标签 (label) 键 (key) keys unique action(动作)

"Person"

"id"

["id"]

FALSE

"DROPPED"

"Person"

"name"

["name"]

TRUE

"DROPPED"