Mongoose 的文档说:
Schema.prototype.pre():
Parameters:
The «String|RegExp» method name or regular expression to match method name
[options] «Object»
[options.document] «Boolean» If name is a hook for both document and query middleware, set to true to run on document middleware.
[options.query] «Boolean» If name is a hook for both document and query middleware, set to true to run on query middleware.
callback «Function»
还有关于 pre hook“deleteOne”:
Mongoose - middleware
Document middleware is supported for the following document functions. In document middleware functions, this refers to the document:
...deleteOneQuery middleware is supported for the following Model and Query functions. In query middleware >functions, this refers to the query:
...deleteOne
所以,deleteOne 位于 Document 和 Query Hook 中,现在让我们尝试使用它:
mySchema.pre('deleteOne', { document: true }, function(next) {
console.log(this)
next()
})
结果:这是指查询,而不是文档。为什么?
最佳答案
哦,文档中并不清楚,“this”仅指文档#deleteOne中的文档。
因此,“deleteOne”钩子(Hook)的正确用法是:
在模型中:
DocSchema.pre('deleteOne', { document: true }, function(next) {
console.log(this)
next()
})
稍后在代码中(在 Controller 等中):
const doc = await DocModel.findOne({ name: 'myDoc' })
await doc.deleteOne()
现在“this”指的是文档🎉
关于node.js - Mongoose :中间件预删除选项不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60006362/