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

时间:2012-09-06 10:31:12

标签: node.js mongodb mongoose

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

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

  1. 使用find()检索文档,检查版本是否匹配 预期版本(由客户端在If-Match标头中发送)。
  2. 如果是,请继续更新文档。
  3. 在save()上,如果版本自(1)以后发生了更改,则会失败。
  4. 如果我将setTimeout()置于1和2之间,然后在3之前直接手动更新 __ v ,则保存仍然成功。我认为这是因为在这种情况下,Mongoose认为没有必要在更新中包含version子句。

    我还尝试在save()之前调用 increment()。我假设这会在保存操作期间增加版本,但是好像它正在递增版本,然后在保存时抱怨它与DB中的内容不匹配(显然它不会)。

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

1 个答案:

答案 0 :(得分:1)

您可能也想查看MongoDBs内部的findAndModify命令。

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

它旨在执行您列出的过程