重命名标签、类型和属性

APOC 库包含可用于重命名节点和关系的标签、关系类型和属性的过程。

重命名标签、类型和属性的过程

合格名称 类型

apoc.refactor.rename.label(oldLabel STRING, newLabel STRING, nodes LIST<NODE>) - 将所有 NODE 值的给定标签从 oldLabel 重命名为 newLabel。如果提供了 LIST<NODE>,则重命名仅应用于此 LIST<NODE> 中的 NODE 值。

过程

apoc.refactor.rename.nodeProperty(oldName STRING, newName STRING, nodes LIST<NODE>, config MAP<STRING, ANY>) - 将所有 NODE 值的给定属性从 oldName 重命名为 newName。如果提供了 LIST<NODE>,则重命名仅应用于此 LIST<NODE> 中的 NODE 值。

过程

apoc.refactor.rename.type(oldType STRING, newType STRING, rels LIST<RELATIONSHIP>, config MAP<STRING, ANY>) - 将所有类型为 oldTypeRELATIONSHIP 值重命名为 newType。如果提供了 LIST<RELATIONSHIP>,则重命名仅应用于此 LIST<RELATIONSHIP> 中的 RELATIONSHIP 值。

过程

apoc.refactor.rename.typeProperty(oldName STRING, newName STRING, rels LIST<RELATIONSHIP>, config MAP<STRING, ANY>) - 将所有 RELATIONSHIP 值的给定属性从 oldName 重命名为 newName。如果提供了 LIST<RELATIONSHIP>,则重命名仅应用于此 LIST<RELATIONSHIP> 中的 RELATIONSHIP 值。

过程

配置参数

由于数据集合是使用 apoc.periodic.iterate 分批处理的,这些过程支持以下配置参数

表 1. 配置
名称 类型 默认 描述

batchSize

INTEGER

10000

在单个事务中运行指定数量的操作语句 - 参数: {_count, _batch}

parallel

BOOLEAN

true

并行运行操作语句 (请注意,如果发生冲突,语句可能会死锁)
请注意,在 parallel: false 的情况下,APOC 旨在重用同一个 java.util.concurrent.ThreadPoolExecutor,其最大线程池大小为 1,以防止并行执行;这意味着如果您想执行多个 apoc.periodic.iterate,每个都将在前一个完成后执行。相反,如果 parallel: true,APOC 将使用一个 ThreadPoolExecutor,其最大线程池大小可通过 apoc.jobs.pool.num_threads 配置或默认设置为可用处理器数量的 2 倍。因此,如果我们执行多个 apoc.periodic.iterate,如果队列池大小可以接受新任务,每个都将并行执行。此外,值得注意的是,并行运行会影响所有数据库,而不仅仅是您正在使用的单个数据库。因此,如果存在两个数据库 db1db2,在 db1 上执行 apoc.periodic.iterate 会对性能产生影响,如果我们在 db2 上也执行一个 apoc.periodic.iterate

retries

INTEGER

0

如果操作语句因错误而失败,等待 100 毫秒并重试,直到达到重试次数 - 参数 {_retry}

batchMode

STRING

"BATCH"

操作语句应如何处理数据驱动语句。有效值为

* "BATCH" - 每 batchSize 执行一次操作语句。操作语句前缀如下,它从 $_batch 参数中提取数据驱动语句中返回的每个字段:[source,cypher] ---- UNWIND $_batch AS _batch WITH _batch.field1 AS field1, _batch.field2 AS field2 ---- * "SINGLE" - 一次执行一个操作语句 * "BATCH_SINGLE" - 每 batchSize 执行一次操作语句,但将批处理的解包留给操作语句。操作查询可以通过 $_batch 参数访问批处理值。

concurrency

INTEGER

可用处理器数量

使用 parallel:true 时生成的并发任务数量

示例

以下示例将进一步解释这些过程。

以下查询创建一个包含带有 Engineer 标签的节点,这些节点通过 COLLEAGUES 关系连接
CREATE (mark:Engineer {name: "Mark", city: "London"})
CREATE (jennifer:Engineer {name: "Jennifer", city: "St Louis"})
CREATE (michael:Engineer {name: "Michael", city: "Dresden"})
CREATE (jim:Engineer {name: "Jim", city: "London"})
CREATE (alistair:Engineer {name: "Alistair", city: "London"})

MERGE (jim)-[:COLLEAGUES {since: date("2006-05-01")}]->(alistair)
MERGE (mark)-[:COLLEAGUES {since: date("2018-02-01")}]->(jennifer)
MERGE (mark)-[:COLLEAGUES {since: date("2013-05-01")}]->(michael)

如果运行上述查询,将得到以下图:

apoc.rename initial

重命名节点标签

以下查询将 Mark、Jennifer 和 Michael 的标签从 Engineer 更改为 DevRel
MATCH (person:Engineer)
WHERE person.name IN ["Mark", "Jennifer", "Michael"]
WITH collect(person) AS people
CALL apoc.refactor.rename.label("Engineer", "DevRel", people)
YIELD committedOperations
RETURN committedOperations

如果运行上述查询,将得到以下图:

apoc.rename update node labels

重命名关系类型

以下查询将 Jim 和 Alistair 之间的关系类型从 COLLEAGUES 更改为 FROLLEAGUES
MATCH (:Engineer {name: "Jim"})-[rel]->(:Engineer {name: "Alistair"})
WITH collect(rel) AS rels
CALL apoc.refactor.rename.type("COLLEAGUES", "FROLLEAGUES", rels)
YIELD committedOperations
RETURN committedOperations
apoc.rename rename rel type

重命名节点属性

以下查询将所有带有 DevRel 标签的节点的 city 属性更改为 location
MATCH (person:DevRel)
WITH collect(person) AS people
CALL apoc.refactor.rename.nodeProperty("city", "location", people)
YIELD committedOperations
RETURN committedOperations
以下查询返回此重构完成后图中的所有节点
MATCH (n)
RETURN (n)
表 2. 结果
n

(:DevRel {name: "Jennifer", location: "St Louis"})

(:DevRel {name: "Michael", location: "Dresden"})

(:Engineer {city: "London", name: "Jim"})

(:DevRel {name: "Mark", location: "London"})

(:Engineer {city: "London", name: "Alistair"})

重命名关系属性

以下查询将所有关系的 since 属性更改为 from
MATCH ()-[rel]->()
WITH collect(rel) AS rels
CALL apoc.refactor.rename.typeProperty("since", "from", rels)
YIELD committedOperations
RETURN committedOperations
以下查询返回此重构完成后图中的所有路径
MATCH path = ()-[]->()
RETURN path
表 3. 结果
path

[{"name":"Mark","location":"London"},{"from":"2018-02-01"},{"name":"Jennifer","location":"St Louis"}]

[{"name":"Mark","location":"London"},{"from":"2013-05-01"},{"name":"Michael","location":"Dresden"}]

[{"name":"Jim","city":"London"},{"from":"2006-05-01"},{"name":"Alistair","city":"London"}]

© . All rights reserved.