|| apoc.refactor.categorize - APOC 核心文档 - Neo4j 文档

apoc.refactor.categorize

详情

语法

apoc.refactor.categorize(sourceKey, type, outgoing, label, targetKey, copiedKeys, batchSize)

描述

从图中具有指定 `sourceKey` 作为其属性键之一的 `NODE` 值创建新的类别 `NODE` 值。然后,新的类别 `NODE` 值通过给定类型的 `RELATIONSHIP` 连接到原始 `NODE` 值。

输入参数

名称

类型

描述

sourceKey

STRING

要添加到新节点上的属性键。

type

STRING

连接到新节点的关系类型。

outgoing

BOOLEAN

关系是否应该为出向。

label

STRING

新节点的标签。

targetKey

STRING

新节点上引用源键值的名称。

copiedKeys

LIST<STRING>

要复制到新节点的其他属性键列表。

batchSize

INTEGER

每个批次的最大大小。

使用 Cypher 重构节点

在 Cypher 中,节点标签和关系类型可以在不使用 APOC 的情况下动态引用。

动态创建、匹配和合并标签和类型的 Cypher 语法
CREATE (n1:$(label))-[r:$(type)]->(n2:$(label))
MERGE (n1:$(label))-[r:$(type)]->(n2:$(label))
MATCH (n1:$(label))-[r:$(type)]->(n2:$(label))

动态计算的类型必须评估为 `STRING` 或 `LIST<STRING>`。更多信息请参阅 Cypher 手册 → CREATEMERGEMATCH

在 Cypher 中,可以使用 `CALL {…​} IN CONCURRENT TRANSACTIONS` 实现批处理和并行执行。更多信息请参阅 CALL 事务子查询 → 并发事务

使用示例

本节中的示例基于以下示例图

CREATE (:Movie {title: 'A Few Good Men', genre: 'Drama'});

使用此过程需要一个属性唯一性约束:创建属性唯一性约束

CREATE CONSTRAINT FOR (n:`Genre`) REQUIRE n.`name` IS UNIQUE

以下示例将 `Movie` 节点上的 `genre` 属性转换为具有 `Genre` 标签和 `name` 属性的新节点。同时,还创建了一个从 `Movie` 节点到该流派节点的 `GENRE` 关系。

apoc.refactor.categorize
CALL apoc.refactor.categorize('genre', 'GENRE', true, "Genre", "name", [], 100)
MATCH p=()-[:GENRE]->()
RETURN p
使用 Cypher 的 MERGE 和 REMOVE 子句
MATCH (n) WHERE n.genre IS NOT NULL
MERGE (n)-[:GENRE]->(:Genre {name: n.genre})
REMOVE n.genre
WITH *
MATCH p=()-[:GENRE]->()
RETURN p
结果
p

(:Movie {title: 'A Few Good Men'})-[:GENRE]→(:Genre {name: 'Drama'})

apoc.refactor.categorize.usage
图 1. 新的图结构
© . This site is unofficial and not affiliated with Neo4j, Inc.