apoc.refactor.extractNode

详细信息

语法

apoc.refactor.extractNode(rels, labels, outType, inType) :: (input, output, error)

描述

将给定的 RELATIONSHIP(关系)值扩展为中间的 NODE(节点)值。这些中间 NODE 值通过给定的 outTypeinType 进行连接。

输入参数

名称

类型

描述

rels

ANY

要转换为新节点的关系。关系类型可以是 STRING (elementId())、INTEGER (id())、RELATIONSHIPLIST<STRING | INTEGER | RELATIONSHIP>

标签

LIST<STRING>

要添加到新节点上的标签。

outType

STRING

输出关系的类型。

inType

STRING

输入关系的类型。

返回参数

名称

类型

描述

input

INTEGER(整数)

原始实体的内部 ID。

输出

NODE

复制后的实体。

错误 (error)

STRING

复制过程中发生的任何错误。

使用 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))

动态计算出的类型必须求值为 STRINGLIST<STRING>。更多信息,请参阅 Cypher 手册 → CREATEMERGEMATCH

使用示例

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

CREATE (origin:Airport {code: "LHR"})
CREATE (destination:Airport {code: "AMS"})
CREATE (origin)-[:FLIGHT {number: "BA001"}]->(destination);

以下操作创建了一个 Flight(航班)节点,其中包含从 LHR 指入的 IN 关系,以及指向 AMSOUT 关系。

apoc.refactor.extractNode
MATCH (:Airport)-[rel:FLIGHT]->(:Airport)
WITH collect(rel) AS rels
CALL apoc.refactor.extractNode(rels,['Flight'],'OUT','IN')
YIELD input, output
RETURN input, output;
使用 Cypher
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"})