mongoose v4.4.7
我正在从另一个型号的控制器更新停车模型。 我希望在更新之前进行第二次更新,但它似乎不适用于mongoose hook。
鉴于此查询...
// non Parking controller
Parking.update({_id: parked.parkingId}, {
$set: { 'availability.current': true }
});
我想做点像......
// Parking Model
ParkingsSchema.pre('update', function() {
var self = this;
if (self._update.$set['availability.current']) {
var id = self._conditions._id;
self.findOne()
.then(doc => {
self.update({}, {$set:{'availability.until': doc.ownerBackAt}})
})
.catch(logger.log);
}
});
self.update似乎没有做任何事情 我将console.log(this)添加到预更新挂钩,但它没有显示。
我做错了什么?
也许在更新前/后挂钩中查询文档是不可能的?
答案 0 :(得分:2)
你忘记了next()回调。我已经跳过了'然后'方式和使用正常的findOne和更新方式,这应该做你的工作。
请注意,如果您要根据findOne()的结果修改文档或抛出错误或其他内容,则需要在findOne回调中移动next()回调
ParkingsSchema.pre('update', function(next) {
var self = this;
if (self._update.$set.availability.current) {
var id = self._conditions._id;
self.findOne({key:id},function(err,doc){
if(err)
console.log(err);
else
self.update({},{$set:{'availability.until': doc.ownerBackAt}});
});
}
next();
});