收藏
回答

云数据库inc、mul等原子操作过程中能否添加where条件去限制?

需求:数据库有些资源需要进行自增自减进行抢占。

目的:同时还需要考虑资源是否为0,不能自减到负数。

目前我看到有人提供这样的代码:

db.collection('activity').where({

    activity_id: _.eq("test1"),

    goodsLeft: _.gt(0)

  }).update({

    data: {

      goodsLeft: _.inc(-1)//每次把剩余商品数减一

    }

  }).then(function(d){

    if(d.stats.updated>0) {/*抢购成功*/ }

    else {/*抢购失败*/ }

  })


在update之前进行了where帮忙判断库存情况。


疑问:所以我想请教,原子操作是否可以添加where条件判断。同时延申来讲,如果我的where不指定id,是一个批量覆盖的条件,那岂不是会对大量的记录进行原子操作?

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

1 个回答

  • Mr.Zhao
    Mr.Zhao
    发表于移动端
    2023-07-22
    你需要用到事务
    2023-07-22
    有用
    回复 3
    • 
      2023-07-22
      事务里面明确说了只能用doc去更新,不支持where条件查询更新。但是关于原子操作的并没有解释能不能添加where条件
      2023-07-22
      回复
    • Mr.Zhao
      Mr.Zhao
      2023-07-22回复
      我的意思是使用事务  先查询出来当前的值,用js判断是否需要扣减,然后执行update
      2023-07-22
      回复
    • 
      2023-07-22
      事务查询是快照查询,无法保证当前值是最新值,js判断扣减有一定概率是会出现问题
      2023-07-22
      回复
登录 后发表内容