在mongoose预中间件中,如何访问更新查询?

Jas*_*onY 6 mongoose mongodb node.js express mongoose-plugins

我正在尝试使用mongoose> 4.0.0的新不稳定版本来验证更新查询.

说我想使用以下查询更新架构

schema.update({_id:'blah'},{a:'blah'},function(err){
//do your thing
})
Run Code Online (Sandbox Code Playgroud)

所以我说我有以下架构,

var schema = new Schema({
a:{type:String}
});

schema.pre('update',function(next){
var findQuery=this._conditions;  // gives {_id:'blah'}

// how do i get {a:'blah'}????

next();
});
Run Code Online (Sandbox Code Playgroud)

如何在预中间件中获得{set:{a:'blah'}}的更新查询,以便在执行更新之前进行一些检查?

或者我知道更新查询可以在后中间件中访问

schema.post('update',function(){
var findQuery=this._conditions;  // gives {_id:'blah'}

var updateQuery=this._update; //gives {$set:{a:'blah'}}

next();
});
Run Code Online (Sandbox Code Playgroud)

但为时已晚,我需要在预先中间件中进行检查才能实际更新数据库.

我尝试查看预中间件的'this'对象,但无法在任何地方找到updateQuery对象,并且this._update在预中间件中未定义.

有没有办法做到这一点?谢谢

dbr*_*anj 1

如果您仍在寻找适用于数组操作的解决方案,它看起来像在较新版本的 mongoose 中(至少4.0.7+),this._update是在预中间件中定义的。