MongoDB完整性更新边缘案例

时间:2015-12-23 20:22:01

标签: mongodb

您好,我在数据库中有以下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}然后更新?如果两个查询都找到了条目,那么这一切都取决于谁先更新?

1 个答案:

答案 0 :(得分:0)

由于单个文档更新为atomic,因此无论您的两个命令执行的顺序如何,该文档最终都将显示为:

{amount : 9999, approved: true, ...}

如果第一个命令先执行,那么第二个命令将覆盖它。

如果第一个命令首先执行,则第一个命令无效,因为approve现在是true,因此更新条件不会匹配。

您(正确)做的是完善的optimistic concurrency"update if current"方法来管理并发访问。