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

Jus*_*tin 7 javascript mongoose mongodb node.js mongoose-schema

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

有没有办法自动递增?目前,我刚刚将它添加到中间件以获取更新类型的查询:

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()
        } )
    } )
}
Run Code Online (Sandbox Code Playgroud)

这似乎有用..但我有点认为在Mongoose中已经有办法做到这一点..我错了吗?

Ant*_*ine 7

我想说这是要走的路.中间件完全适合这种需要,我不知道其他任何方式.事实上,这就是我在所有模式中所做的事情.

但是,您需要注意的是文档查询中间件之间的区别. 文档中间件是为执行init,validate,saveremove操作.那里,this指的是文件:

schema.pre('save', function(next) {
  this.increment();
  return next();
});
Run Code Online (Sandbox Code Playgroud)

查询中间件针对执行count,find,findOne,findOneAndRemove,findOneAndUpdateupdate操作.在那里,this指的是查询对象.更新此类操作的版本字段如下所示:

schema.pre('update', function( next ) {
  this.update({}, { $inc: { __v: 1 } }, next );
});
Run Code Online (Sandbox Code Playgroud)

来源:mongoose文档.

  • 由于某种原因,如果我将“next”放在查询更新旁边,它会以 2 为步长递增 (2认同)