2017-05-08 68 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