1

我知道 Mongoose 中的版本控制主要是为了避免子文档数组的问题。但是,是否也可以利用该功能来避免文档更新冲突?即两个用户同时更新同一个文档。

理想情况下,我想做的是这样的:

  1. 使用 find() 检索文档,检查版本是否与预期版本匹配(由客户端在 If-Match 标头中发送)。
  2. 如果是这样,请继续更新文档。
  3. 在 save() 上,如果版本自 (1) 以来已更改,则失败。

如果我将 setTimeout() 放在 1 和 2 之间,然后直接在 3 之前手动更新__v,保存仍然成功。我认为这是因为 Mongoose 认为在这种情况下没有必要在更新中包含版本子句。

我还尝试在 save( ) 之前调用 increment( )。我认为这会在保存操作期间增加版本,但是似乎它正在增加版本,然后在保存时抱怨它与数据库中的内容不匹配(显然不会)。

我最好使用中间件自己实现版本控制吗?

4

1 回答 1

1

您可能还想查看 MongoDB 的内部 findAndModify 命令。

http://www.mongodb.org/display/DOCS/Atomic+Operations#AtomicOperations-FindandModify%28orRemove%29

它旨在执行您列出的过程

于 2012-09-17T06:44:20.257 回答