我知道 Mongoose 中的版本控制主要是为了避免子文档数组的问题。但是,是否也可以利用该功能来避免文档更新冲突?即两个用户同时更新同一个文档。
理想情况下,我想做的是这样的:
- 使用 find() 检索文档,检查版本是否与预期版本匹配(由客户端在 If-Match 标头中发送)。
- 如果是这样,请继续更新文档。
- 在 save() 上,如果版本自 (1) 以来已更改,则失败。
如果我将 setTimeout() 放在 1 和 2 之间,然后直接在 3 之前手动更新__v,保存仍然成功。我认为这是因为 Mongoose 认为在这种情况下没有必要在更新中包含版本子句。
我还尝试在 save( ) 之前调用 increment( )。我认为这会在保存操作期间增加版本,但是似乎它正在增加版本,然后在保存时抱怨它与数据库中的内容不匹配(显然不会)。
我最好使用中间件自己实现版本控制吗?