2017-12-16 58 views
0

私の削除ルートではProduct.findByIdAndRemove(id)を呼び出してproductScheme.pre('remove')フックをトリガーします。 console.logが実際に私の端末に何も出力しないことを除いて、私のコードは正常に動作します。製品ドキュメントがCategories.products配列から削除されているため、正常に機能しています。モンゴース事前削除は動作しますがConsole.logを出力しません

私の製品スキーマ

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

申し訳ありませんppl。

productScheme.pre('remove')は実際にはトリガーされません。

Product.findByIdAndRemove(id)に電話すると、私のカテゴリモデルの製品が自動的に更新されます。これは、参照がnullに設定されているため、Category.productsのリストから削除された製品が削除されるためです。

同様の現象は、リスト以外の参照でも発生します。製品のスキーマ内に1つの商品(商品のリストではない)のカテゴリが1つしかない場合、そのカテゴリを削除すると、値はnullに設定されます。

関連する問題