【问题标题】:mongoose pre update hook - update document doesn't work猫鼬预更新挂钩 - 更新文档不起作用
【发布时间】:2016-07-14 00:18:02
【问题描述】:

猫鼬 v4.4.7

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

鉴于此查询...

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

我做错了什么?

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

【问题讨论】:

  • 您使用的是什么猫鼬版本.. 更新挂钩仅在 4.x 之后支持
  • @NaeemShaikh mongoose v4.4.7

标签: mongoose mongoose-schema


【解决方案1】:

你忘记了 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();
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-24
    • 2013-02-02
    • 2018-02-28
    • 2018-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多