Mongo的竞争条件和最有效的模式?

时间:2011-07-29 20:19:37

标签: concurrency mongodb

我开始使用Mongo,我想知道:在Mongo中处理竞争条件的最佳方法是什么?

例如,如果我的文档的版本设置为1,而用户A将其更新为版本2,则当用户B尝试从版本1(用户B收到的版本)更新版本时,应通知用户B表示记录已更新。

一种解决方案是使用版本字段findAndModify作为查询的条件。

例如:

db.things.findAndModify({query: { version: "1"}, update: { $set: {Title: "New Title"}}})

但是,这里的问题是如果版本已经递增,则返回null。问题是,这与已删除的记录无法区分,因此必须使用第二个查询来检查文档是否仍然存在以确认它是否只是已更新的版本。

这是我天真的做法。我想知道:在Mongo中有更合适的模式会更有效吗?

1 个答案:

答案 0 :(得分:0)

这种并发必须从客户端处理。所以你正在做的是AFAIK,这是正确的。

我认为任何数据库都是如此,而不仅仅是Mongo。