Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何在Mongoose/node中获得评级平均值(使用对象数组中的评级)_Node.js_Mongodb_Mongoose_Mongodb Query - Fatal编程技术网

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”}}}