概述
使用语句update()
可以更新符合过滤条件的点和边的自定义属性值。
点和边的系统属性(_id
,_uuid
)以及边的起终点不可变更,无法修改。
// 更新点
update().nodes(<filter?>)
.set({<property1>: <value1>, <property2?>: <value2?> ...})
// 更新边
update().edges(<filter?>)
.set({<property1>: <value1>, <property2?>: <value2?> ...})
方法 |
参数 |
描述 |
---|---|---|
nodes() 或edges() |
<filter?> |
将过滤条件包裹在{} 中,或使用别名指定待更新的点或边。留空时会作用在所有点或边上 |
set() |
属性规范 | 将包裹在{} 中的属性规范指定为更新内容 |
示例图集
在一个空图集中,逐行运行以下UQL语句,创建示例图集:
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", name:"Jason", age:30}, {_id:"U002", name:"Tim"}, {_id:"U003", name:"Grace", age:25}, {_id:"U004", name:"Ted", age:26}])
insert().into(@follow).edges([{_from:"U004", _to:"U001", time:"2021-9-10"}, {_from:"U003", _to:"U001", time:"2020-3-12"}, {_from:"U004", _to:"U002", time:"2023-7-30"}])
更新点
更新点属性name
为Tim的对应属性值:
update().nodes({name == "Tim"}).set({name: "Tom"})
更新边
更新当前time
属性值晚于2021-5-21的边,将其time
属性值设置为一天后,并返回更新后的边:
update().edges({time > "2021-5-1"}).set({time: dateAdd(time, 1, "day")}) as edges
return edges{*}
结果:edges
_uuid |
_from |
_to |
_from_uuid |
_to_uuid |
schema |
values |
---|---|---|---|---|---|---|
Sys-gen | U004 | U001 | UUID of U004 | UUID of U001 | follow | {time: "2021-09-11 00:00:00"} |
Sys-gen | U004 | U002 | UUID of U004 | UUID of U002 | follow | {time: "2023-07-31 00:00:00"} |
更新所有
更新所有点的age
属性,将其设置为下一个更大的整数:
update().nodes().set({age: age + 1}) as n
return table(n.name, n.age)
结果:
name | age |
---|---|
Jason | 31 |
Tim | null |
Grace | 26 |
Ted | 27 |
限制更新数量
要限制更新的点/边数量,首先需使用find()
语句从数据库中获取数据,接着应用LIMIT N
语句,仅保留前N
条记录至变量中,随后传递给update()
语句。
仅更新两个@user
点的name
属性,将其设置为小写:
find().nodes({@user}) as n1 limit 2
update().nodes(n1).set({name: lower(name)}) as n2
return n2{*}
结果:n2
_id |
_uuid |
schema |
values |
---|---|---|---|
U004 | Sys-gen | user | {name: "ted", age: 26} |
U002 | Sys-gen | user | {name: "tim", age: null } |
删除属性值
删除点_id
为U001的name
属性值和age
属性值:
update().nodes({_id == "U001"}).set({name: null, age: null})