重命名标签、类型和属性

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

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

限定名称 类型

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

过程 (Procedure) Cypher 25 中已弃用

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

过程 (Procedure) Cypher 25 中已弃用

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

过程 (Procedure) Cypher 25 中已弃用

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

过程 (Procedure) Cypher 25 中已弃用

配置参数

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

表 1. 配置
名称 (name) type 默认 description(描述)

batchSize

INTEGER(整数)

10000

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

parallel(并行)

布尔值 (BOOLEAN)

true

并行运行操作语句(注意:如果存在冲突,语句可能会发生死锁)
请注意,在 parallel: false 的情况下,APOC 的设计是复用同一个最大池大小为 1 的 java.util.concurrent.ThreadPoolExecutor,以防止并行执行;这意味着如果您想执行多个 apoc.periodic.iterate,每一个都将在前一个完成后执行。相反,当 parallel: true 时,APOC 将使用一个 ThreadPoolExecutor,其最大池大小可通过 apoc.jobs.pool.num_threads 配置,默认值为可用处理器数量 * 2。因此,如果我们执行多个 apoc.periodic.iterate,只要队列池大小可以接受新任务,它们就会并行执行。此外,需要注意的是,并行运行会影响所有数据库,而不仅仅是您当前正在使用的单个数据库。例如,如果有 2 个数据库 db1db2,如果我们在 db2 上执行 apoc.periodic.iterate,那么在 db1 上执行的 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 时生成的并发任务数量

示例

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

以下代码创建了一个图形,其中包含由 COLLEAGUES 关系连接的带有 Engineer 标签的节点
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"}]