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

apoc.refactor.extractNode

详情

语法

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

描述

将给定的 RELATIONSHIP 值扩展为中间 NODE 值。中间的 NODE 值通过给定的 outTypeinType 连接。

输入参数

名称

类型

描述

rels

任意类型

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

labels

LIST<STRING>

要添加到新节点的标签。

outType

STRING

传出关系的类型。

inType

STRING

传入关系的类型。

返回参数

名称

类型

描述

input

INTEGER

原始实体的内部 ID。

output

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 节点,其中包含从 LHRAMSIN 关系和 OUT 关系

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 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"})

© . This site is unofficial and not affiliated with Neo4j, Inc.