Mongoose findByIdAndUpdate()或update()和increment()。如何增加__v?

时间:2012-12-29 07:30:02

标签: mongodb mongoose

有没有办法合并Model.findByIdAndUpdateModel.increment(),这会增加mongoose native versionKey?或Model.update()以及__v的任何增量?

此代码不会增加__v

Station.update({ _id: req.params.id }, 
               { $set: req.body, $inc: { __v: 1 } }, 
               { multi: false },  callback);

但会增加任何自定义Number字段:

Station.update({ _id: req.params.id }, 
               { $set: req.body, $inc: { count: 1 } }, 
               { multi: false },  callback);

到目前为止,我发现只有一种方法可以增加__v

Station.findById(req.params.id, function (err, station) {
    station.increment();  // this increments __v
    station.save(req.body, callback)
})

1 个答案:

答案 0 :(得分:4)

It's possible that this is by design.特别是__v是一个特殊的mongoose内部密钥,其特定用途是防止多个保存操作在文档的Array元素发生位置变化时发生冲突。原子更新操作本身不会面临这种风险,因此单独使用它们不需要增加__v

然而,可以将原子更新与非原子查找/保存结构交错,因此我提交了issue供开发人员查看。