apoc.refactor.extractNode
语法 |
|
||
描述 |
将给定的 |
||
输入参数 |
名称 |
类型 |
描述 |
|
|
要转换为新节点的关系。关系可以是 |
|
|
|
要添加到新节点的标签。 |
|
|
|
传出关系的类型。 |
|
|
|
传入关系的类型。 |
|
返回参数 |
名称 |
类型 |
描述 |
|
|
原始实体的内部 ID。 |
|
|
|
复制的实体。 |
|
|
|
复制过程中发生的任何错误。 |
|
使用 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。
使用示例
本节中的示例基于以下示例图
CREATE (origin:Airport {code: "LHR"})
CREATE (destination:Airport {code: "AMS"})
CREATE (origin)-[:FLIGHT {number: "BA001"}]->(destination);
以下创建了一个 Flight 节点,其中包含从 LHR 到 AMS 的 IN 关系和 OUT 关系
MATCH (:Airport)-[rel:FLIGHT]->(:Airport)
WITH collect(rel) AS rels
CALL apoc.refactor.extractNode(rels,['Flight'],'OUT','IN')
YIELD input, output
RETURN input, output;
MATCH (:Airport)-[rel:FLIGHT]->(:Airport)
CALL (rel) {
WITH startNode(rel) AS startNode, endNode(rel) AS endNode, rel
CREATE (startNode)-[:IN]->(f:Flight)-[:OUT]->(endNode)
SET f = properties(rel)
DELETE rel
}
RETURN 0 AS input, newNode AS output
| input | output |
|---|---|
0 |
(:Flight {number: "BA001"}) |
我们可以通过运行以下查询来列出所有 Flight 节点
MATCH path = (origin)-[:IN]->(:Flight)-[:OUT]->(destination)
RETURN path;
| 路径 |
|---|
(:Airport {code: "LHR"})-[:IN]→(:Flight {number: "BA001"})-[:OUT]→(:Airport {code: "AMS"}) |