在 SurrealDB 里使用 UPDATE 声明可以更新数据。复制一份请求,名字设置成“更新数据”
批量带条件
假设现在我们要修改 post 表里的数据记录,把 status 字段的值改成 published。用一下 UPDATE,后面是要更新的东西,比如 post,然后用 SET 设置一下要修改的东西,把 post 表里的数据记录的 status 字段的值设置成 published。
这里可以再用 WHERE 设置一个条件,stauts 等于 draft,这样就只会更新 stauts 字段的值是 draft 的数据记录。执行一下,会返回几条被更新的数据记录。
再试一下,给所有的 post 添加一个 tags 属性,UPDATE post SET tags ,它的值是一个数组,里面添加一个 “古文”。
现在所有内容都会包含一个 tags 属性,它是一个数组,里面有个项目是“古文”。如果想在这个数组里添加新的项目,可以这样试一下 UPDATE post SET tags += '唐诗' 。意思就是在 tags 这个数组里添加一个新的项目,值是字符串 “唐诗”。
想要删除数组里的项目,可以用 -= ,比如把 tags 里的 “古文” 这个项目删除掉。
CONTENT
更新指定的数据记录,可以在 UPDATE 声明的后面指定一个数据记录的 id,比如 post:1,如果你想用新的内容替换掉原有的内容,可以用一下 CONTENT ,后面是一个对象,对象里的东西就是这条数据记录的新的值。先添加一个 title 属性,设置一下它的值。
现在 post:1 这条数据里面,就只会包含一个 title 属性了。
MERGE
如果只想更新部分内容,可以把 CONTENT 换成 MERGE,在这个对象里添加一个 content 属性,然后设置一下具体的值,执行一下。这次 post:1 这个数据记录里,会包含之前的 title,然后 MERGE 更新之后的 content 属性。
再执行一次这个 MERGE 更新,同样提供一个 content 属性,修改一下属性的值,执行一下。现在 post:1 这条数据的 content 属性值就是更新之后的值了。
PATCH
下面再试一下 PATCH 更新,UPDATE post:1 更新的是 post:1 这条数据,后面用一个 PATCH,在它的后面是一个数组,里面的每个项目都是一个对象,对象里有几个属性,op,path 还有 value,op 指的是操作,它的值可以是 add,replace 或者 remove,表示添加、替换还有删除。path 是要修改的属性在文档里的路径,value 是具体的值。
把 op 设置成 add,表示添加,然后把 path 设置成 /status,再把 value 设置成 draft。执行一下。更新之后,这个 post:1 数据里面会出现一个 status 属性,它的值就会是 draft。
再试一下 remove 操作,把 op 设置成 remove,路径设置成 /status,不提供 value。执行一下,完成以后,这个 post:1 数据里的 status 属性就被删除掉了。