2017-12-16 76 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')은 실제로 트리거되지 않습니다.

참조 번호 null으로 설정되어 있기 때문에 Product.findByIdAndRemove(id)으로 전화를 걸면 내 범주 모델의 제품이 자동으로 업데이트되고 Category.products 목록에서 삭제 된 제품이 제거됩니다.

비표준 참조에서도 비슷한 문제가 발생합니다. 내 제품 스키마에서 단일 제품에 대한 단일 카테고리 (제품 목록 아님) 만있는 경우 카테고리를 삭제하면 값은 null으로 설정됩니다.