SET(设置)

SET 子句用于更新顶点和边上的标签和属性。

注意!

在 YMatrix AGE 中,由于底层存储是 MPP,因此需要将数据进行 motion。此时就会划分为多个 slice。因为 YMatrix 只能有一个 write slice,此时就可能引发报错: ERROR: AssignTransactionId() called by Segment Reader process。因此,尽量在一个 cypher 中,尽可能少的同时使用多个写算子。

终端 SET 子句

不跟随其他子句的 SET 子句是终端子句。当 Cypher 查询以终端子句结尾时,cypher 函数调用不会返回任何结果。但是,cypher 函数调用仍然需要列定义列表。当 cypher 以终端节点结尾时,在列定义列表中定义一个值即可:该变量不会返回任何数据。

设置属性

要在节点或关系上设置属性,使用 SET

查询

SELECT *
FROM cypher('graph_name', $$
   MATCH (v {name: 'Andres'})
   SET v.surname = 'Taylor'
$$) as (v agtype);

查询返回新更改的节点。

结果

v
(0 rows)

返回创建的顶点

使用以下查询创建单个顶点:

查询

SELECT *
FROM cypher('graph_name', $$
    MATCH (v {name: 'Andres'})
    SET v.surname = 'Taylor'
    RETURN v
$$) as (v agtype);

查询返回新更改的顶点。

结果

v
{id: 3; label: 'Person'; properties: {surname:"Taylor", name:"Andres", age:36, hungry:true}}::vertex
(1 row)

移除属性

通常可以使用 REMOVE 来移除属性,但用户也可以使用 SET 命令来移除属性。例如当属性来自参数时。

查询

SELECT *
FROM cypher('graph_name', $$
    MATCH (v {name: 'Andres'})
    SET v.name = NULL
    RETURN v
$$) as (v agtype);

查询返回该节点,name 属性现已被移除。

结果

v
{id: 3; label: 'Person'; properties: {surname:"Taylor", age:36, hungry:true}}::vertex
(1 row)

使用一个 SET 子句设置多个属性

如果你想在一个查询中设置多个属性,可以用逗号分隔。

查询

SELECT *
FROM cypher('graph_name', $$
MATCH (v {name: 'Andres'})
SET v.position = 'Developer', v.surname = 'Taylor'
RETURN v
$$) as (v agtype);

结果

v
{"id": 281474976710661, "label": "", "properties": {"name": "Andres", "surname": "Taylor", "position": "Developer"}}::vertex
(1 row)

使用多个SET子句设置多个属性

可以使用多个SET子句来设置多个属性。

尽可能的使用同一个SET子句来更新多个属性,而不是使用多个SET子句更新多个属性。

查询

SELECT *
FROM cypher('graph_name', $$
MATCH (v {name: 'Andres'})
SET v.position = 'Developer'
SET v.surname = 'Taylor'
RETURN v
$$) as (v agtype);

结果

v
{"id": 281474976710661, "label": "", "properties": {"name": "Andres", "surname": "Taylor", "position": "Developer"}}::vertex
(1 row)