概述
update()
子句更新图集中符合过滤条件的点、边的属性值(除_id
和_uuid
外)。
语法
// 更新点
update().nodes(<filter>)
.set({<property1>: <value1>, <property2>: <value2> ...})
.limit(<N>)
// 更新边
update().edges(<filter>)
.set({<property1>: <value1>, <property2>: <value2> ...})
.limit(<N>)
- 符合
nodes()
或edges()
方法中指定条件的点或边会被更新。过滤条件为空时,更新全部点、边。 - 在
set()
方法里指定新的属性值。 - 在
limit()
方法(可选)中限制执行更新的数据量。 - 支持定义子句别名,数据类型为NODE或EDGE。
示例图集
![](https://img.ultipa.cn/draw/draw_7ba67eef1d1944c68565eb64b7a3cdf9.jpg?v='1715850533768')
在一个空图集中,逐行运行以下赢图GQL语句,创建示例图集:
create().node_schema("user").edge_schema("follow")
create().node_property(@user, "name").node_property(@user, "age", int32).edge_property(@follow, "time", datetime)
insert().into(@user).nodes([{_id:"U001", _uuid:1, name:"Jason", age:30}, {_id:"U002", _uuid:2, name:"Tim"}, {_id:"U003", _uuid:3, name:"Grace", age:25}, {_id:"U004", _uuid:4, name:"Ted", age:26}])
insert().into(@follow).edges([{_uuid:1, _from_uuid:4, _to_uuid:1, time:"2021-9-10"}, {_uuid:2, _from_uuid:3, _to_uuid:2, time:"2020-3-12"}, {_uuid:3, _from_uuid:4, _to_uuid:2, time:"2023-7-30"}])
示例
更新点
update().nodes({name == "Tim"}).set({name: "Tom"})
本例更新name
属性值为Tim的点,即_id
为U002的点。
更新边
update().edges({time > "2021-5-1"}).set({time: dateAdd(time, 1, "day")}) as edges
return edges{*}
本例更新time
属性值晚于2021-5-1的边,将其time
属性值增加一天。
结果:
_uuid | _from | _to | _from_uuid |
_to_uuid | time |
---|---|---|---|---|---|
1 | U004 | U001 | 4 | 1 | 2021-09-11 00:00:00 |
3 | U004 | U002 | 4 | 2 | 2023-07-31 00:00:00 |
更新所有点/边
update().nodes().set({age: age + 1}) as n
return table(n.name, n.age)
结果:
name | age |
---|---|
Jason | 31 |
Tom | null |
Grace | 26 |
Ted | 27 |
限制更新数量
update().nodes({@user}).set({name: lower(name)}).limit(2) as nodes
return nodes{*}
本例将@user
点的name
属性值改为小写,且仅更新最先找到的两个点。
结果:
_id | _uuid | name | age |
---|---|---|---|
U001 | 1 | jason | 31 |
U002 | 2 | tom | null |
常见失败原因
- 在
set()
方法中指定_uuid
或_id
的值,导致更新失败,因为唯一标识符属性值不可更新。