mongoose pre update hook - 更新文档不起作用

时间:2016-03-26 09:11:38

标签: mongoose mongoose-schema

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)添加到预更新挂钩,但它没有显示。

我做错了什么?

也许在更新前/后挂钩中查询文档是不可能的?

1 个答案:

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