使用MongoDB Aggregate Framework计算用户活动

时间:2013-07-15 16:41:40

标签: mongodb

我会尽量保持这一点。我有用户对象,在我的用户对象中我有一个字段,该字段只包含用户登录日期的ISOD。我想计算在特定日期登录的所有日期的用户数量

示例用户:

{
  "_id": "some_id",
  "name": "bob",
  "logins": [isodate, isodate, isodate...],

  //...
 }

我想要一个输出,告诉我类似的东西:

{
  "date": ISODate,
  "number_of_users_logged_in": 10
}

这可能吗?我该怎么做呢?

1 个答案:

答案 0 :(得分:1)

您需要使用$unwind操作爆炸数组,然后$group按日期(使用您想要的粒度)和$project仅使用日期和计数,如下所示:

db.user.aggregate({
    $unwind: "$logins"
},
{
    $group: {
        _id: {
            year: {
                $year: "$logins"
            },
            month: {
                $month: "$logins"
            },
            day: {
                $dayOfMonth: "$logins"
            },
            hour: {
                $hour: "$logins"
            }
        },
        date: {
            $first: "$logins"
        },
        count: {
            $sum: 1
        }
    }
},
{
    $project: {
        _id : 0,
        date: "$date",
        number_of_users_logged_in: "$count"
    }
})

我按年/月/日/小时分组。