MERGE

更新时间:2025-01-09 07:26:25

MERGE子句确保图中存在某个模式。这个模式要么已经存在,要么需要创建。MERGE会匹配已存在的节点,或者创建新数据,是MATCHCREATE的结合。

例如,您可以指定图中必须包含一个具有特定名称的用户节点。如果不存在具有正确名称的节点,则会创建一个新节点并设置其名称属性。当使用MERGE处理完整模式时,其行为是整个模式匹配或整个模式被创建。MERGE不会部分使用已存在的模式。如果需要部分匹配,可以通过将模式拆分为多个MERGE子句来实现。

MATCH类似,MERGE可以匹配多个模式实例。如果有多个匹配项,它们都将传递到查询的后续阶段。

数据准备

SELECT * from cypher('graph_name', $$
CREATE (A:Person {name: "Charlie Sheen", bornIn: "New York"}),
    (B:Person {name: "Michael Douglas", bornIn: "New Jersey"}),
    (C:Person {name: "Rob Reiner", bornIn: "New York"}),
    (D:Person {name: "Oliver Stone", bornIn: "New York"}),
    (E:Person {name: "Martin Sheen", bornIn: "Ohio"})
$$) as (result agtype);

合并节点

合并带有标签的节点

仅通过指定一个没有标签的单个顶点的模式,将返回图中的所有顶点。

示例

SELECT * FROM cypher('graph_name', $$
MERGE (v:Critic)
RETURN v
$$) as (v agtype);

如果存在带有标签Critic的顶点,则返回该顶点。否则,将创建并返回该顶点。

                           v                                   
-----------------------------------------------------
  {id: 0; label: ‘Critic’: properties:{}}::vertex
(1 row)

合并具有属性的单个顶点

合并一个具有属性的顶点节点,其中并非所有属性都与任何现有顶点匹配。

示例

SELECT * FROM cypher('graph_name', $$
MERGE (charlie {name: 'Charlie Sheen', age: 10})
RETURN charlie
$$) as (v agtype);

如果存在带有标签Critic的顶点,则返回该顶点。否则,将创建并返回该顶点。

                                      v                                           
-------------------------------------------------------------------------------
 {id: 0; label: ‘Actor’: properties:{name: 'Charlie Sheen', age: 10}}::vertex
(1 row)

如果存在具有所有属性的顶点,则返回该顶点。否则,将创建并返回一个名为Charlie Sheen的新顶点。

合并单个顶点,同时指定标签和属性

合并一个顶点,其中标签和属性约束与现有顶点匹配。

示例

SELECT * FROM cypher('graph_name', $$
MERGE (michael:Person {name: 'Michael Douglas'})
RETURN michael.name, michael.bornIn
$$) as (Name agtype, BornIn agtype);

如果存在带有标签Critic的顶点,则返回该顶点。否则,将创建并返回该顶点。

       Name        |    BornIn    
-------------------+-------------- 
 "Michael Douglas" | "New Jersey"
(1 row)

  • 本页导读 (1)
  • 数据准备
  • 合并节点
  • 合并带有标签的节点
  • 合并具有属性的单个顶点
  • 合并单个顶点,同时指定标签和属性

点击开启售前

在线咨询服务