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}然后更新?如果两个查询都已经找到了条目,那么这完全取决于谁先更新?

因为单个文档更新是原子的,所以无论您的两个命令执行的顺序如何,文档最终都将显示为:

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

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

如果第二个命令首先执行,那么第一个命令没有效果,因为approve现在是true,所以更新条件不匹配。

您(正确地)正在做的是完善的乐观并发或"更新当前"方法来管理并发访问。

最新更新