Chr*_*oba 2 concurrency multithreading distributed race-condition mongodb
只有在满足条件且没有竞争条件的情况下,是否可以插入或更新集合中的项目?
例如,假设我有一个带有timestamp字段和temperature字段的集合.只有在时间戳至少有一个小时的情况下才能更新特定项目吗?我知道我可以(步骤1)通过一次调用检查时间戳,然后(步骤2)进行一些数学运算以查看时间戳是否超过一小时前,然后(步骤3)更新集合中的项目(如果是).
但是如果另一个客户端在此客户端运行步骤2时更新客户端,则会失败.然后,当我只需要一个时,会发生两次更新.
这不是我正在处理的具体案例,但说明了我的问题.如果mongo操作依赖于另一个mongo操作,那么如何解决竞争条件?
你需要的是findAndModify;)
它允许在单个操作中执行a GET后跟UPDATE.
您可以使用处理标志,首先是false,然后在执行时更改它 findAnModify()
db.col.findAndModify({
query: { processed: false },
update: { $inc: { score: 1 }, $set:{processed: true} }
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1132 次 |
| 最近记录: |