更新模型并调用方法

时间:2018-11-27 16:55:58

标签: javascript node.js mongodb mongoose

我正在更新模型对象,并希望在执行此操作时调用一个方法。

我可能会

  • findOne
  • 更改我的属性
  • 在对象上调用方法
  • save

但是,有没有一种方法可以通过updatefindOneAndUpdate实现呢?

我知道我可能还可以使用更新前事件挂钩,但是我没有找到跟踪哪些字段已更改的可能性,因为我不想在任何更新时触发该方法,但是如果有特定字段改变了。

1 个答案:

答案 0 :(得分:0)

我认为您正在寻找猫鼬middlewares或钩子之类的东西。 您可以在以下挂钩中选择:

  • pre:在函数执行之前被调用
  • post:函数执行后调用
  • 您将钩子注册到mongoose-model-schema中

这是一个预钩示例:

schema.pre('save', function(next) {
  const err = new Error('something went wrong');
  // If you call `next()` with an argument, that argument is assumed to be
  // an error.
  next(err);
});

schema.pre('save', function() {
  // You can also return a promise that rejects
  return new Promise((resolve, reject) => {
    reject(new Error('something went wrong'));
  });
});

schema.pre('save', function() {
  // You can also throw a synchronous error
  throw new Error('something went wrong');
});

schema.pre('save', async function() {
  await Promise.resolve();
  // You can also throw an error in an `async` function
  throw new Error('something went wrong');
});

// later...

// Changes will not be persisted to MongoDB because a pre hook errored out
myDoc.save(function(err) {
  console.log(err.message); // something went wrong
});