《微信小程序开发从入门到实战》学习四十一
4.2 云开发JSON数据库
4.2.12 更新指令
update方法除了用指定值更新字段外,数据库API还提供了更新指令执行更复杂的 更新的操作,更新指令被封装在db.command对象中的函数。如下表所示:
set 设置字段为指定值
remove 删除字段
inc 原子自增字段值
mul 原子自乘字段值
push 如果字段值为数组,往数组尾部增加指定值
pop 如果字段值为数组,从数组尾部删除一个元素
shift 如果字段值为数组, 从数组头部删除一个元素
unshift 如果字段值为数组, 从数组头部增加一个元素
假设集合有这样一条记录:
{
"style": {
"color":"red",
"size":"large"
}
}
使用set指令进行更新,不管原字段值为多少,都会将原字段值替换成指定值,代码如下:
db.collection('testOne').doc('id-1').update({
data: {
style: db.command.set({
color: 'blue'
})
}
}).then(res=> {
console.log(res)
})
更新后,记录的值变为:
{
"style": {
"color":"blue"
}
}
inc和mul指令可以将字段的值增加或者乘上某个数组,如下段代码可将待办事项的进度+20%:
db.collection('testOne').doc('id-1').update({
data: {
progress: db.command.inc(10) //progress字段值自增10
}
}).then(res=> {
console.log(res)
})
res的值为:
res = {
errMsg: "document.update:ok",
stats: {
updated: 1 //updated表示被更新的记录的数量
}
}
也有将ID为id-1的数据读出来,将progress增加,再使用普通的更新方式更新回去。当两个用户先后对progress进行加操作,发生并发冲突,可能会计算出与预期值不一样的结果。
使用更新指令会避免这种冲突,因为更新指令的操作是原子操作。
如果字段是个数组 ,那么我们可以使用push,pop,shift和unshift对数组进行原子更新,比如给 一条待办事项加多一个标签,代码如下:
db.collection('testOne').doc('id-1').update({
data: {
tags: ["加油"]
}
})
db.collection('testOne').doc('id-1').update({
data: {
tags: db.command.push('mini-program')
}
}).then(res=> {
console.log(res)
})
4.2.13 删除数据
小程序端的API支持删除集合中的单个记录,对记录引用使用remove方法可删除记录。代码如下:
db.collection('testOne').doc('id-1').remove().then(res=> {
console.log(res)
})
res的值为:
res = {
errMsg: "document.remove:ok",
stats: {
removed: 1 //删除的记录的数量
}
}
如果希望删除集合的多个记录,只需要在集合引用上执行 remove方法,如果希望删除集合上满足 某种条件的记录,搭配where方法和remove方法即可,代码如下:
db.collection('testOne').where({done:true}).remove()
在小程序端 ,用户具有写权限可以执行删除操作。