在Mongoose.js v3中进行版本控制

我知道在Mongoose中版本化主要是为了避免子文档数组的问题。 但是,是否也可以使用该function来避免对文档的更新发生冲突? 即两个用户同时更新同一个文档。

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

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

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

我也试着在save()之前调用increment ()。 我认为这将增加在保存操作的版本,但它似乎是增加版本,然后保存抱怨它不匹配什么是在数据库(这显然不会)。

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

您可能也需要查看MongoDB内部的findAndModify命令。

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

它旨在执行您所列的过程