Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么使用mongoose中间件;前";是否不调用带有{query:true}的remove?_Javascript_Node.js_Mongodb_Mongoose_Mongoose Schema - Fatal编程技术网

Javascript 为什么使用mongoose中间件;前";是否不调用带有{query:true}的remove?

Javascript 为什么使用mongoose中间件;前";是否不调用带有{query:true}的remove?,javascript,node.js,mongodb,mongoose,mongoose-schema,Javascript,Node.js,Mongodb,Mongoose,Mongoose Schema,我在这个问题上有点纠结。 我已经阅读了所有关于中间件和一些stackoverflow问题的mongoose文档,无法找到如何在不重复查询的情况下解决我的问题(查找然后删除) 通常,当从模型而不是从文档调用时,remove上的预中间件不会启动。但根据,如果我添加{query:true},我的函数将从模型查询中调用 我使用最新的monngoose版本(5.4.16) 这是我的密码 let mySchema= new mongoose.Schema({ name: String, commen

我在这个问题上有点纠结。 我已经阅读了所有关于中间件和一些stackoverflow问题的mongoose文档,无法找到如何在不重复查询的情况下解决我的问题(查找然后删除)

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

我使用最新的monngoose版本(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(),它就会工作

A根据文件:

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


这是因为您使用的是MyModel.deleteOne()。使用MyModel.remove(),它就会工作

A根据文件:

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

我以前使用过Model.remove(),但这也不起作用。。。但那是在升级猫鼬之前(4.13.4到5.4.16)。你说得对,我只是今早更新了我所有的电话。。。感谢您的帮助我以前使用过Model.remove(),但这也不起作用。。。但那是在升级猫鼬之前(4.13.4到5.4.16)。你说得对,我只是今早更新了我所有的电话。。。谢谢你的帮助