2015-10-04 52 views
1

我有一個貓鼬的架構,其結構有點像這樣 -Mongoose如何添加一個方法來模擬每次更新或創建文檔時執行的模式?

var SaleSchema = new Schema({ 
    name: String, 
    creation_datetime: {type: Date, default: Date.now}, 
    account_from: {type: Schema.ObjectId, ref:'Account'}, 
    account_to: {type: Schema.ObjectId, ref:'Account'}, 
    transaction: { 
     items: [{ 
      ref: { 
       type: Schema.ObjectId, ref:'Item' 
      }, 
      name: { 
       type: String 
      }, 
      quantity: { 
       type: Number 
      }, 
      cost: { 
       type: Number 
      }, 
      discount: { 
       type: Number 
      }, 
      pricePerUnit: { 
       type: Number 
      } 
     }], 
     name: String 
    }, 
    paid: {type:Number, default: 0}, 
    total: {type:Number, default: 0} 
}); 

module.exports = mongoose.model('Sale', SaleSchema); 

所以,我想要做的是計算總與項目陣列中的每個項目的成本每次保存或編輯時間。 我可以在控制器功能中做到這一點,但我不想在該功能中增加額外的複雜性,所以有什麼辦法可以附加一個可以爲我做的預先方法嗎?

回答

1

您可以使用像下面和更新您的文檔:

SaleSchema.pre('save', function(next) { 
    // do stuff 
    next(); 
}); 

來源: http://mongoosejs.com/docs/api.html#schema_Schema-pre

+0

我如何根據一些條件我設置報告錯誤,就像我在這裏扔一回,如果是那麼如何設置錯誤狀態碼。 – DeadMan

+0

你可以用next()做任何事情。如果(someError){return next(new Boom.notFound('Invalid');}。我使用Boom進行錯誤處理,您可以使用您的錯誤處理程序。 –

相關問題