2017-05-08 105 views
0

我有一個貓鼬的模式,看起來像這樣:貓鼬場復位

var mongoose = require('mongoose'); 
var _ = require('lodash'); 
var Schema = mongoose.Schema; 


var shopSchema = new mongoose.Schema({ 

    name: {type: String, trim: true}, 
    description: {type: String, trim: true}, 
    rating: Number, 
    ratingsData: [{type: Number}] 

}); 

shopSchema.methods.rate = function(rating){ 
    this.ratingsData.push(rating); 
    this.rating = _.mean(this.ratingsData); 
    return this.ratingsData; 
} 

module.exports = mongoose.model('Shop', shopSchema); 

率的方法應該追加傳遞給它的ratingsData字段中的值,然後返回數組的平均值。我遇到的問題是,每次調用該方法時,this.ratingsData都只是一個空數組。由於某些原因,以前的值不會被保存。因此,我得到的平均值始終是傳遞給方法的評分。

我在做什麼錯?

+0

如果您嘗試將數據插入到數據庫要麼做插入或保存到數據庫。嘗試檢索數據並計算平均值之前的事件。我沒有看到任何保存功能。 –

+0

你可以在向db插入值之後執行操作。我無法理解你如何在同一時間嘗試實現這兩件事情。 –

回答

1

你剛纔沒有保存架構對象,你需要的東西是這樣的:

shopSchema.methods.rate = function(rating, clb){ 
    this.ratingsData.push(rating); 
    this.rating = _.mean(this.ratingsData); 

    this.save(function(err, result){ 
     if(err) throw err; 
     return clb(result.ratingsData); 
    }) 
}; 

,或者如果您使用的承諾:

shopSchema.methods.rate = function(rating){ 
    this.ratingsData.push(rating); 
    this.rating = _.mean(this.ratingsData); 

    return this.save() 
    .then(result=>{ 
     return result.ratingsData 
    }) 
    .catch(err=>{ 
     throw err; 
    }) 
}; 
+0

這是我在上午4點嘗試編碼時發生的情況。我想念這樣的事情。不管怎麼說,還是要謝謝你。 – ninesalt