我尝试从mongoose 'deleteOne' post hook方法调用mongoose静态方法。但在这样做的时候,我得到下面的错误:this.constructor.calculateAverageRating不是函数
reviewSchema.statics.calculateAverageRating = async function (productId) {
console.log(productId);
};
reviewSchema.post("deleteOne", async function () {
await this.constructor.calculateAverageRating(this.product);
});
字符串
1条答案
按热度按时间xu3bshqb1#
查询中间件
注意:Mongoose与
schema.pre('remove')
不同,默认在Query#updateOne()
和Query#deleteOne()
上注册updateOne
和deleteOne
中间件。这意味着doc.updateOne()
和Model.updateOne()
都会触发updateOne钩子,但this
引用的是查询,而不是文档。要将updateOne
或deleteOne
中间件注册为文档中间件,请使用schema.pre('updateOne', { document: true, query: false })
。calculateAverageRating
是Model类上的静态方法,不是Query类示例上的。你可以通过mongoose.model('ModelName')
方法得到模型类。字符串
日志:
型
文档中间件
要将
updateOne
或deleteOne
中间件注册为文档中间件,请使用schema.pre('updateOne', { document: true, query: false })
。在文档中间件函数中,
this
引用文档。要访问模型,请使用this.constructor
。型
日志:
型