1

猫鼬 v4.4.7

我正在从另一个模型的控制器更新停车模型。我想在该更新之前进行第二次更新,但它似乎不适用于猫鼬钩子。

鉴于此查询...

// 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) 添加到 pre update 挂钩并且它没有显示。

我究竟做错了什么?

也许无法在更新前/更新后挂钩中查询文档?

4

1 回答 1

3

你忘记了 next() 回调。我跳过了“then”方式并使用了正常的 findOne 和 update 方式,这应该可以完成您的工作。

请注意,如果您要根据 findOne() 的结果修改文档或抛出错误或其他内容,则需要将 next() 回调移动到 findOne 回调中。

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();
});
于 2016-07-27T08:17:36.977 回答