Node.js 如何在Mongoose/node中获得评级平均值(使用对象数组中的评级)
我需要计算一篇文章的平均评分,评分在一个对象数组中 以下是我的模式/模型:Node.js 如何在Mongoose/node中获得评级平均值(使用对象数组中的评级),node.js,mongodb,mongoose,mongodb-query,Node.js,Mongodb,Mongoose,Mongodb Query,我需要计算一篇文章的平均评分,评分在一个对象数组中 以下是我的模式/模型: module.exports = mongoose.model('Article', { title : String, text : String, star : { type: Number, default: 3.5} ... }); var userSchema = mongoose.Schema({ email : String, passwo
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 } ]
这样做,我得到了所有用户的平均评价,但我希望在评级时得到所有用户的平均评级。articleID=articleIDD。
我怎么能用猫鼬做到这一点
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的建议)解决了我的问题 可能重复使用
{$group:{{u id:null,avgRate:{$avg:“$rating.rate”}}}