apoc.merge.relationship

详细信息

语法

apoc.merge.relationship(startNode, relType, identProps, onCreateProps, endNode [, onMatchProps ]) :: (rel)

描述

将给定的 RELATIONSHIP 值与指定的动态类型/属性进行合并。

输入参数

名称

类型

描述

startNode

NODE

关系的起始节点。

relType

STRING

关系的类型。

identProps

MAP

始终参与合并的关系属性。

onCreateProps

MAP

当关系被创建时进行合并的属性。

endNode

NODE

关系的结束节点。

onMatchProps

MAP

当关系被匹配到时进行合并的属性。默认值为:{}

返回参数

名称

类型

描述

关系

RELATIONSHIP

更新后的关系。

使用示例

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

CREATE (p:Person {name: "Tom Hanks"})
CREATE (m:Movie {title:"You've Got Mail"});

相比 Cypher 的 MERGE 子句,此过程提供了更灵活的关系合并方式。

下例展示了在 Tom HanksYou’ve Got Mail 节点之间合并 ACTED_IN 关系的等效方法

apoc.merge.relationship
MATCH (p:Person {name: "Tom Hanks"})
MATCH (m:Movie {title:"You've Got Mail"})
CALL apoc.merge.relationship(p, "ACTED_IN",
  {roles:['Joe Fox']},
  {created: datetime()},
  m,
  {lastSeen: datetime()}
)
YIELD rel
RETURN rel;
MERGE 子句
MATCH (p:Person {name: "Tom Hanks"})
MATCH (m:Movie {title:"You've Got Mail"})
MERGE (p)-[rel:ACTED_IN {roles:['Joe Fox']}]->(m)
ON CREATE SET rel.created = datetime()
ON MATCH SET rel.lastSeen = datetime()
RETURN rel;

如果我们多次运行这些查询,将看到如下输出

结果
关系

[:ACTED_IN {lastSeen: 2020-11-03T11:02:00.261Z, created: 2020-11-03T11:00:56.849Z, roles: ["Joe Fox"]}]

但此过程主要用于合并具有动态关系类型或动态属性的关系。例如,我们可能希望合并一个以参数形式传入关系类型或属性的关系。

以下代码创建了 relationshipTypeproperties 参数

:param relType =>  ("ACTED_IN");
:param properties => ({roles: ["Joe Fox"]});

以下代码根据之前定义的参数,合并了一个具有特定关系类型和属性的关系

MATCH (p:Person {name: "Tom Hanks"})
MATCH (m:Movie {title:"You've Got Mail"})
CALL apoc.merge.relationship(p, $relType, $properties, {}, m, {})
YIELD rel
RETURN rel;
结果
关系

[:ACTED_IN {roles: ["Joe Fox"]}]