我需要计算一篇文章的评分平均值,评分是在一个对象数组中
这是我的架构/模型:
module.exports = mongoose.model('Article', {
title : String,
text : String,
star : { type: Number, default: 3.5}
...
});
var userSchema = mongoose.Schema({
email : String,
password : String,
name : String,
rating : {type : Array, default: []}
});
module.exports = mongoose.model('User', userSchema);
评级数组中的对象与{ "rate" : "X", "articleID" : "Y" }
现在在这个功能中,我需要计算平均评分
function recalculateArticleRate(articleIDD) {
console.log("Recalculate article rate");
User.aggregate([
{ $match: { "rating.articleID" : articleIDD } },
{ $unwind: "$rating" },
{ $group : {_id : "$_id", avgRate : { $avg : "$rating.rate" } } }
], function (err, result) {
if (err) {
console.log(err);
return;
}
console.log(result);
});
}
这是结果对象:
[ { _id: 58f519acfcb29003b572048b, avgRate: 3 },
{ _id: 58f5093159c45002f10ea7da, avgRate: 3 } ]
这样做我获得了所有用户评估的平均值,但我想要在rating.articleID = articleIDD时所有用户的平均评分。 我怎么能用Mongoose做到这一点?
答案 0 :(得分:0)
function recalculateArticleRate(articleIDD) {
User.aggregate([
{ $unwind: "$rating" },
{ $match: { "rating.articleID" : articleIDD } },
{ $group : {_id : null, avgRate : { $avg : "$rating.rate" } } }
], function (err, result) {
if (err) {
console.log(err);
return;
}
});
}
放开之前和_id = null(按照Veeram的建议)解决了我的问题!