你好,我在数据库中有以下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
,所以更新条件不匹配。
您(正确地)正在做的是完善的乐观并发或"更新当前"方法来管理并发访问。