在Mongoose.js v3中进行版本控制
我知道在Mongoose中版本化主要是为了避免子文档数组的问题。 但是,是否也可以使用该function来避免对文档的更新发生冲突? 即两个用户同时更新同一个文档。
理想情况下,我想要做的是这样的:
- 使用find()检索文档,检查版本是否与预期的版本匹配(由If-Match头中的客户端发送)。
- 如果是这样,继续更新文档。
- 在save()上,如果版本从(1)开始改变,则失败。
如果我把setTimeout()放在1和2之间,那么在3之前手动更新__v ,保存仍然成功。 我认为这是因为在这种情况下,Mongoose不认为有必要在更新中包含版本子句。
我也试着在save()之前调用increment ()。 我认为这将增加在保存操作的版本,但它似乎是增加版本,然后保存抱怨它不匹配什么是在数据库(这显然不会)。
我最好用自己的中间件来实现版本控制吗?
您可能也需要查看MongoDB内部的findAndModify命令。
http://www.mongodb.org/display/DOCS/Atomic+Operations#AtomicOperations-FindandModify%28orRemove%29
它旨在执行您所列的过程