简单的方法来增加任何更新查询的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中间件恰好符合这个需求,我不知道任何其他的方式。 事实上,这正是我在所有模式中所做的。
但是,您需要了解的是文档和查询中间件之间的区别。 文件中间件执行init
, validate
, save
和remove
操作。 在那里, this
是指文件:
schema.pre('save', function(next) { this.increment(); return next(); });
查询中间件执行count
, find
, findOne
, findOneAndRemove
, findOneAndUpdate
和update
操作。 在那里, this
是指查询对象。 更新这些操作的版本字段将如下所示:
schema.pre('update', function( next ) { this.update({}, { $inc: { __v: 1 } }, next ); });
来源: mongoose文件 。