【发布时间】:2016-03-30 07:53:06
【问题描述】:
您好,我在数据库中有以下 JSON,
{
recordName : String
amount : Number
approved : Boolean
}
假设我有两个用户同时发出这两个命令
Record.update({recordName: "test", approved: false},{$set: {amount : 5000, approved: false,...)
Record.update({recordName: "test", approved: false},{$set: {amount : 9999, approved: true,...)
是否始终保证最终结果始终为金额 9999 并且批准为真?
我担心最终结果有时可能是金额 5000 并且批准是错误的。
我不太确定 MongoDB 管道。
我相信更新分为两个阶段? Find {recordName: "test", approved: false} 然后更新?如果两个查询都已经找到了该条目怎么办,那么这一切都取决于谁先更新?
【问题讨论】:
-
单文档操作总是
atomic,但不保证执行顺序。在您的情况下,如果其中一个查询都将approved状态更新为“true”,则其中一个查询将无法更新。 -
或者你可以利用文档版本控制技术,看看这个question
-
@BatScream 我读过有关原子和并发的文章。似乎mongodb会在写入或更新时锁定进程。所以问题是。更新过程是指仅当文档更新时,还是指查询数据再更新的全过程?
标签: mongodb