node.jsmongodbexpressmongoosemongoose-plugins

In mongoose pre middleware, how do i access the update query?


I am trying to use the new unstable version of mongoose >4.0.0 to validate update queries.

say that i want to update a schema using the following query

schema.update({_id:'blah'},{a:'blah'},function(err){
//do your thing
})

so lets say i have the following schema,

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();
});

how do i get the update query of {set:{a:'blah'}} in the pre middleware so i can do some checks before executing the update?

alternatively i know that the update query can be accessed in the post middleware, in

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

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

next();
});

but thats too late, i need this in the pre middleware to check before actually updating the db.

i tried looking through the 'this' object of the pre middleware but cannot find the updateQuery object anywhere and this._update is undefined in the pre middleware.

Is there a way to do this? thanks


Solution

  • In case you're still looking for a solution that works on array operations, it looks like in newer versions of mongoose (at least 4.0.7+), this._update is defined in the pre-middleware.