首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在原子操作中测试和递减?

在原子操作中测试和递减?
EN

Stack Overflow用户
提问于 2013-01-22 16:22:09
回答 1查看 695关注 0票数 2

我刚刚找到了一个恼人的虫子,这是一个基本的种族条件。为了便于讨论,让我们假设一个非常简单的文档结构,比如{ _id : 'XXX', amount : 100 }

这些文档中有数百个存在于一个集合中,多个作者可以访问这些文档,这些作者实际上试图将这些文档的数量降低任何值,但绝不低于0。目前,这是通过两个查询来完成的:

  • 第一个查询确定当前金额。
  • 只有当金额大于要减去和减少当前金额的值时,才会触发第二个查询。

当然,当多个线程同时执行时,这很容易导致混乱。但是有办法在原子操作中做到这一点吗?我在文档中找不到任何类似于test-and-set操作的东西。

如果相关的话:运行这些操作的代码是服务器端JavaScript,运行有多个Node.js实例和mongodb npm包。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-22 16:26:40

如果amount大于0,则只更新文档:

代码语言:javascript
复制
db.coll.update({_id: 'XXX', amount: {$gt: 0}}, {$inc: {amount: -1}})
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14463189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档