gpt4 book ai didi

multithreading - 蒙戈 : eliminating race condition on conditional update

转载 作者:可可西里 更新时间:2023-11-01 09:59:07 26 4
gpt4 key购买 nike

是否可以在没有竞争条件的情况下仅在满足条件的情况下插入或更新集合中的项目?

例如,假设我有一个包含 timestamp 字段和 temperature 字段的集合。仅当时间戳至少一小时后才可以更新特定项目吗?我知道我可以(第 1 步)通过一次调用检查时间戳,然后(第 2 步)做一些数学运算以查看时间戳是否超过一个小时,然后(第 3 步)更新集合中的项目(如果是)。

但是如果另一个客户端在该客户端运行第 2 步时更新客户端,则此操作失败。然后当我只想要一个时会发生两个更新。

这不是我正在处理的具体案例,但可以说明我的问题。如果一个 mongo 操作依赖于另一个 mongo 操作,如何解决竞争条件?

最佳答案

你需要的是 findAndModify ;)

它允许在单个操作中执行 GET 后跟 UPDATE

您可以使用处理标志,首先为 false,然后在执行 findAnModify()

时更改它
db.col.findAndModify({
query: { processed: false },
update: { $inc: { score: 1 }, $set:{processed: true} }
})

关于multithreading - 蒙戈 : eliminating race condition on conditional update,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28061668/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com