您好,我在数据库中有以下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}
然后更新?如果两个查询都找到了条目,那么这一切都取决于谁先更新?
答案 0 :(得分:0)
由于单个文档更新为atomic,因此无论您的两个命令执行的顺序如何,该文档最终都将显示为:
{amount : 9999, approved: true, ...}
如果第一个命令先执行,那么第二个命令将覆盖它。
如果第一个命令首先执行,则第一个命令无效,因为approve
现在是true
,因此更新条件不会匹配。
您(正确)做的是完善的optimistic concurrency或"update if current"方法来管理并发访问。