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 指入的 IN 关系,以及指向 AMS 的 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 | 输出 |
|---|---|
0 |
(:Flight {number: "BA001"}) |
我们可以通过运行以下查询来列出所有的 Flight 节点:
MATCH path = (origin)-[:IN]->(:Flight)-[:OUT]->(destination)
RETURN path;
| path |
|---|
(:Airport {code: "LHR"})-[:IN]→(:Flight {number: "BA001"})-[:OUT]→(:Airport {code: "AMS"}) |