在我的删除路由中,我正在调用Product.findByIdAndRemove(id)
,这将触发productScheme.pre('remove')
挂钩。我的代码工作正常,只是console.log
从未在终端上实际输出任何内容,我知道它的工作原理是因为Product.products数组中删除了Product文档。
我的产品架构
const productSchema = new Schema({
brandName: { type: String, required : true }, // e.g. Holden
name: { type: String, required : true }, // e.g. Commodore
categories: [{ type: Schema.ObjectId, ref: 'Category', default: [] }]
})
productSchema.pre('remove', next => {
console.log('PRODUCT PRE REMOVE') // <--- Never gets outputted. Why?
// The update works
Category.update(
{ products : { $in : this._id } },
{ $pull: { products: this._id } },
{ multi: true })
.exec()
next()
})
我的类别架构
const categorySchema = new Schema({
name: { type: String, unique: true, required : true }, // e.g. Cars
products: [{ type: Schema.ObjectId, ref: 'Product', default: [] }]
})
希望了解为何会发生这种情况。谢谢!
答案 0 :(得分:0)
想出来。对不起ppl。
永远不会真正触发productScheme.pre('remove')
。
另一方面,当我调用Product.findByIdAndRemove(id)
时,我的类别模型中的产品会自动更新,因为引用设置为null
,这会从Category.products列表中删除已删除的产品。
非列表引用上会发生类似的行为。如果我的产品架构中只有一个产品(不是产品列表)的单一类别,则在删除类别时,该值将设置为null
。