apoc.nodes.link

详细信息

语法

apoc.nodes.link(nodes, type [, config ])

描述

创建一个由给定的 NODE(节点)值组成的链表,并使用给定的 RELATIONSHIP(关系)类型进行连接。

输入参数

名称

类型

描述

节点

LIST<NODE>

要链接的节点列表。

type

STRING

用于连接节点的名称关系类型。

config

MAP

{ avoidDuplicates = false :: BOOLEAN } 默认值为:{}

此过程在本地实例上受到限制。若要使用它,必须解除限制。有关详细信息,请参阅 安装 → 加载并解除限制

配置参数

此过程支持以下配置参数

配置参数
名称 类型 默认 描述

avoidDuplicates

布尔值 (BOOLEAN)

false

如果为 true,且关系已存在,则不会创建该关系。

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

CREATE (:Event {name: "Event 1", date: datetime("2019-06-01")})
CREATE (:Event {name: "Event 2", date: datetime("2019-06-04")})
CREATE (:Event {name: "Event 3", date: datetime("2019-06-08")});

我们可以通过在 Cypher 或 APOC 中运行以下查询,为这些事件创建一个链表:

apoc.nodes.link
MATCH (e:Event)
WITH e ORDER BY e.date
WITH collect(e) AS events
CALL apoc.nodes.link(events, "NEXT")
RETURN count(*);
使用 Cypher
MATCH (e:Event)
WITH e ORDER BY e.date
WITH collect(e) AS events
UNWIND range(0, size(events) - 2) AS x
WITH x, events[x] AS node1, events[x+1] AS node2
CREATE (node1)-[:NEXT]->(node2)
RETURN count(*);
linked list events

我们可以使用 {avoidDuplicates: true} 配置来检查关系是否存在;若连续两次调用之前的查询,节点间会创建 2 个类型为 "NEXT" 的关系。相反,通过执行 CALL apoc.nodes.link(events, "NEXT", {avoidDuplicates: true}),将只会创建一个类型为 "NEXT" 的关系。

同样,对于等效的 Cypher 语句,将 CREATE 更改为 MERGE 将产生与 avoidDuplicates: true} 相同的效果。