当前位置: 首页 > article >正文

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

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

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


http://www.kler.cn/a/158704.html

相关文章:

  • 什么是循环神经网络
  • EEG+EMG学习系列 (1) :一个基于小波的自动睡眠评分模型
  • go语言中反射机制(3种使用场景)
  • c++数字雨实现
  • 搭建MC服务器
  • PostgreSQL技术内幕18:物理备份工具pg_basebackup
  • 广域网(WAN)设备通信过程(通信流程、通信步骤、通信顺序、设备通信、主机通信)(MAC地址在本地链路中的作用)跳跃(hop)
  • 【算法思考记录】力扣2477. 到达首都的最少油耗【Java,深度优先搜索】
  • LoadBalancer将服务暴露到外部实现负载均衡metallb-layer2模式配置介绍
  • 手机大厂必备测试技能有哪些?CTS 兼容测试首当其冲
  • Jinja2使用Layui报 “d is not defined“
  • ASEM工控机维修工业电脑控制器维修PB3400
  • 【Vulnhub 靶场】【HackathonCTF: 2】【简单】【20210620】
  • 龙芯loongarch64服务器编译安装maturin
  • 外包干了8个月,技术退步明显.......
  • 什么是上采样和下采样?
  • Java8实战-总结50
  • rcssci包横空出世,限制性立方样条全自动切点靓图
  • 【计算机系统基石与Linux进程管理深度解析】
  • 【无标题】什么是UL9540测试,UL9540:2023版本增加哪些测试项目
  • UE4 UE5 使用SVN控制
  • C#:文件和文件夹的相关操作详解
  • CTF特训日记day(4-6)
  • 代码随想录算法训练营第24天|● 理论基础 ● 77. 组合
  • 代码随想录算法训练营 ---第五十五天
  • unity 2d入门飞翔小鸟按钮点击功能且场景切换(二)