收藏
回答

云开发怎么将集合中某一个字段的值+1?

云开发怎么将集合中某一个字段的值+1

如果先取出来加1再更新,多个人同时操作时会出现覆盖的情况

回答关注问题邀请回答
收藏

2 个回答

  • 自渡
    自渡
    2019-08-24

    找到解决办法了

    db.command.inc

    更新指令。用于指示字段自增某个值,这是个原子操作,使用这个操作指令而不是先读数据、再加、再写回的好处是:

    1. 原子性:多个用户同时写,对数据库来说都是将字段加一,不会有后来者覆写前者的情况

    2. 减少一次网络请求:不需先读再写


    2019-08-24
    有用 1
    回复 2
    • 大閩小鎭
      大閩小鎭
      2020-11-02
      集合中某一字段的所有的值自增1,可以吗?
      2020-11-02
      回复
    • 千战
      千战
      2021-11-25回复大閩小鎭
      可以啊
      2021-11-25
      回复
  • 红萝卜炒鸡蛋
    红萝卜炒鸡蛋
    2019-08-24

    你得设置个锁标志,更新之前看这个锁标志是不是锁住了,如果锁了,说明有人在更新,就不能操作,更新完后将锁标志复位,别人就可以操作了。

    这种操作也有问题,就是网络延时的问题,两个人同时去取锁标志,在极短的间隔时间内可能取到的都是未锁标志,就会出现你说的多人覆盖情况。

    正常情况下小程序对同一字段允许多人操作的场景不多吧,通过权限控制来避免多人操作才是上策。

    2019-08-24
    有用
    回复 1
    • 自渡
      自渡
      2019-08-24
      找到解决方法了,自带的inc
      2019-08-24
      1
      回复
登录 后发表内容
问题标签