Node.js mongoose:中间件pre-deleteOne选项不起作用

Node.js mongoose:中间件pre-deleteOne选项不起作用,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,猫鼬的记录表明: Schema.prototype.pre:参数:«String | RegExp»方法 名称或正则表达式以匹配方法名称[选项] «对象» [options.document]«Boolean»如果名称是文档和查询中间件的挂钩,则设置为true以在文档中间件上运行。 [options.query]«Boolean»如果名称是文档和 查询中间件,设置为true以在查询中间件上运行。 回调«函数» 还有关于预钩删除一个: 文档中间件支持以下文档功能。在里面 文档中间件功能,这是指文

猫鼬的记录表明:

Schema.prototype.pre:参数:«String | RegExp»方法 名称或正则表达式以匹配方法名称[选项] «对象» [options.document]«Boolean»如果名称是文档和查询中间件的挂钩,则设置为true以在文档中间件上运行。 [options.query]«Boolean»如果名称是文档和 查询中间件,设置为true以在查询中间件上运行。 回调«函数»

还有关于预钩删除一个:

文档中间件支持以下文档功能。在里面 文档中间件功能,这是指文档: …删除一个

查询中间件支持以下模型和查询功能。在查询中间件>函数中,这是指查询: …删除一个

因此,deleteOne位于文档和查询挂钩中,现在让我们尝试使用它:

mySchema.pre'deleteOne',{document:true},functionnext{ 控制台,logthis 下一个 }
结果:这是指查询,而不是文档。为什么?

噢,从文档中不清楚,“this”仅指documentdeleteOne中的文档

因此,“deleteOne”钩子的正确用法是: 在模型中:

DocSchema.pre'deleteOne',{document:true},functionnext{ 控制台,logthis 下一个 } 稍后在控制器中的代码中,等等:

const doc=await DocModel.findOne{name:'myDoc'} 等待删除一号文件
现在“this”指的是文档噢,文档中不清楚,“this”指的是文档中的文档

因此,“deleteOne”钩子的正确用法是: 在模型中:

DocSchema.pre'deleteOne',{document:true},functionnext{ 控制台,logthis 下一个 } 稍后在控制器中的代码中,等等:

const doc=await DocModel.findOne{name:'myDoc'} 等待删除一号文件
现在“this”指的是您需要添加到选项中的文档:{query,false}

如果没有,预挂钩将运行两次:

首先是文档-这将是文档

第二个查询-这将是查询

这样写:

DocSchema.pre('deleteOne', { document: true,query,false }, function(next) {
  console.log(this)

})

您需要添加到选项:{query,false}

如果没有,预挂钩将运行两次:

首先是文档-这将是文档

第二个查询-这将是查询

这样写:

DocSchema.pre('deleteOne', { document: true,query,false }, function(next) {
  console.log(this)

})

我们可以在deletemy call中调用这个预中间件吗?例如,我必须删除1个模型上的所有依赖项。但removable元素还有另一个依赖项,所以我应该在第二个模型中调用什么呢?我正在这样做,但它似乎从未达到文档预挂接的程度。我们可以在deleteMany调用中调用这个预中间件吗?例如,我必须删除1个模型上的所有依赖项。但removable元素有另一个依赖项,所以在第二个模型中我应该调用什么呢?我正在这样做,但看起来,它实际上从未到达文档前钩子