《微信小程序开发从入门到实战》学习四十一

2023-12-03  本文已影响0人  阿宅白石

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()

在小程序端 ,用户具有写权限可以执行删除操作。

上一篇 下一篇

猜你喜欢

热点阅读