MONGO-给定用户Id的每周平均距离

时间:2017-12-08 10:45:37

标签: mongodb mongoose mongodb-query aggregation-framework

我有一个

的集合
{ 
   id
   distance
   time
   date
   userId
}

我想得到给定userId的每周平均距离。 到目前为止,我设法

    Model.aggregate([{ 
                $project : {      
                        year : {
                            $year : "$date"
                        }, 

                        week : {
                            $week : "$date"
                        }    
                }
                }, {
                $group : {
                _id : {
                    year : "$year",
                    week : "$week"
                }
                total : {
                    $sum: 1
                } 
        }


} ]

我的输出是我每周在我的数据库中的注册数量,但我不能再进一步了解

我非常感谢任何建议或帮助

先谢谢

1 个答案:

答案 0 :(得分:0)

感谢大家, 最后这对我有用

 Model.aggregate([
            {   $match: { userId:mongoose.Types.ObjectId(userId) }},
            {   $project : {      
                    year : { $year : "$date" }, 
                    week : { $week : "$date" },
                    userId: "$userId",
                    distance: "$distance",
                }
            },
            {   $group : {
                    _id : {
                        year : "$year",                      
                        week : "$week"
                    },             
                    distance:{ $avg: "$distance" },     
                    total : { $sum: 1 } 
                }
            }]

所以第一个匹配只获得userId的行(注意id必须是一个mongoose Object id,而不是字符串或数字)。

然后我们使用年份和周作为id避免在不同年份同一周,最后我们可以得到平均值$ avg