MERGE
子句确保图中存在某个模式。这个模式要么已经存在,要么需要创建。MERGE
会匹配已存在的节点,或者创建新数据,是MATCH
和CREATE
的结合。
例如,您可以指定图中必须包含一个具有特定名称的用户节点。如果不存在具有正确名称的节点,则会创建一个新节点并设置其名称属性。当使用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)
- 数据准备
- 合并节点
- 合并带有标签的节点
- 合并具有属性的单个顶点
- 合并单个顶点,同时指定标签和属性