每日活跃用户数量范围

时间:2016-07-03 12:20:45

标签: mongodb aggregation-framework

我正在使用mongodb来保存邮件。 以这种格式保存的消息

{
    userId: String,
    date: Date,
    message: String
}

现在我希望获得范围内的所有每日活跃用户ID。我想只用聚合做。可以有人说我最优雅的方式做这样的聚合,它必须尽可能快地工作。

我想到的第一个想法是按日期对所有消息进行分组,并获取所有日期的usersIds,然后使用循环过滤每日活跃用户,但这不是好方法,并且工作缓慢。问题是我不想在没有聚合的情况下做任何事情。所以聚合必须返回类似这样的东西

{
    dayOfYear: Number,
    users: [ String ]
}

2 个答案:

答案 0 :(得分:1)

我认为这是解决问题的最快方法:

db.gor.aggregate([{
            $group : {
                _id : {
                    year : {
                        $year : "$date"
                    },
                    dayOfYear : {
                        $dayOfYear : "$date"
                    }
                },
                users : {
                    $addToSet : "$userId"
                }
            }
        }

])

欢迎任何评论!

答案 1 :(得分:0)

{{1}}