我刚刚找到了一个恼人的虫子,这是一个基本的种族条件。为了便于讨论,让我们假设一个非常简单的文档结构,比如{ _id : 'XXX', amount : 100 }。
这些文档中有数百个存在于一个集合中,多个作者可以访问这些文档,这些作者实际上试图将这些文档的数量降低任何值,但绝不低于0。目前,这是通过两个查询来完成的:
当然,当多个线程同时执行时,这很容易导致混乱。但是有办法在原子操作中做到这一点吗?我在文档中找不到任何类似于test-and-set操作的东西。
如果相关的话:运行这些操作的代码是服务器端JavaScript,运行有多个Node.js实例和mongodb npm包。
发布于 2013-01-22 16:26:40
如果amount大于0,则只更新文档:
db.coll.update({_id: 'XXX', amount: {$gt: 0}}, {$inc: {amount: -1}})https://stackoverflow.com/questions/14463189
复制相似问题