繁体   English   中英

为什么不调用用{query:true}删除的猫鼬中间件“ pre”?

[英]Why mongoose middleware “pre” remove with { query: true } is not called?

我对此问题有些困惑。 我已经阅读了所有有关中间件的猫鼬文档和一些stackoverflow问题,并且无法找到如何解决我的问题而不重复查询(查找然后删除)。

通常,从模型而不是从文档调用时,在remove上的中间件不会触发。 但是根据文档 ,如果我添加{query:true},则将从模型查询中调用我的函数。

我使用最新的猫鼬版本(5.4.16)

这是我的代码。

let mySchema= new mongoose.Schema({
  name: String,
  comment: String
}, { usePushEach: true });

mySchema.pre('remove', { document: true }, function() {
  console.log('remove document');
});
mySchema.pre('remove', { query: true }, function() {
  console.log('remove');
});
const MyModel = mongoose.model('MyModel', mySchema);

还有这里的电话

MyModel.deleteOne({ _id: modelId }, (errorRm) => {
  if (errorRm) {
    return res.json({ success: false, message: `${errorRm.message}` });
  }
    return res.json({ success: true, message: 'Model successfully removed' });
  });

该模型已成功删除,但是“ pre”功能未记录任何内容。

任何帮助都将受到欢迎。

这是因为您正在使用MyModel.deleteOne() 使用MyModel.remove() ,它将起作用。

根据文档:

您可以将选项传递给Schema.pre()和Schema.post()来切换是猫鼬为Document.remove()还是Model.remove()调用remove()钩子:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM