简单的方法来增加任何更新查询的Mongoose文档版本?

我想开始利用Mongoose文档版本控制(__v key)。 我有一个问题,实际上增加版本的价值,然后我发现你必须添加this.increment()执行查询时。

有没有办法自动递增? 现在,我只是把它添加到前置中间件中进行更新types的查询:

 module.exports = Mongoose => { const Schema = Mongoose.Schema const modelSchema = new Schema( { name: Schema.Types.String, description: Schema.Types.String } ) // Any middleware that needs to be fired off for any/all update-type queries _.forEach( [ 'save', 'update', 'findOneAndUpdate' ], query => { // Increment the Mongoose (__v)ersion for any updates modelSchema.pre( query, function( next ) { this.increment() next() } ) } ) } 

这似乎工作..但我有点认为已经有办法做到这一点在mongoose内..我错了吗?

我会说这是要走的路。 pre中间件恰好符合这个需求,我不知道任何其他的方式。 事实上,这正是我在所有模式中所做的。

但是,您需要了解的是文档查询中间件之间的区别。 文件中间件执行initvalidatesaveremove操作。 在那里, this是指文件:

 schema.pre('save', function(next) { this.increment(); return next(); }); 

查询中间件执行countfindfindOnefindOneAndRemovefindOneAndUpdateupdate操作。 在那里, this是指查询对象。 更新这些操作的版本字段将如下所示:

 schema.pre('update', function( next ) { this.update({}, { $inc: { __v: 1 } }, next ); }); 

来源: mongoose文件 。