apoc.refactor.categorize
语法 |
|
||
描述 |
从图中具有指定 `sourceKey` 作为其属性键之一的 `NODE` 值创建新的类别 `NODE` 值。然后,新的类别 `NODE` 值通过给定类型的 `RELATIONSHIP` 连接到原始 `NODE` 值。 |
||
输入参数 |
名称 |
类型 |
描述 |
|
|
要添加到新节点上的属性键。 |
|
|
|
连接到新节点的关系类型。 |
|
|
|
关系是否应该为出向。 |
|
|
|
新节点的标签。 |
|
|
|
新节点上引用源键值的名称。 |
|
|
|
要复制到新节点的其他属性键列表。 |
|
|
|
每个批次的最大大小。 |
|
使用 Cypher 重构节点
在 Cypher 中,节点标签和关系类型可以在不使用 APOC 的情况下动态引用。
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 手册 → CREATE、MERGE、MATCH。
在 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` 关系。
CALL apoc.refactor.categorize('genre', 'GENRE', true, "Genre", "name", [], 100)
MATCH p=()-[:GENRE]->()
RETURN p
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'}) |