【问题标题】:Counting user activity with MongoDB Aggregate Framework使用 MongoDB Aggregate Framework 计算用户活动
【发布时间】:2013-07-15 16:41:40
【问题描述】:

我会尽量保持简单。我有用户对象,在我的用户对象中我有一个字段,它是一个数组,它只包含用户登录日期的 ISODates。我想计算存在的所有日期的特定日期有多少用户登录.

示例用户:

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

  //...
 }

我想要一个能告诉我类似以下内容的输出:

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

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

【问题讨论】:

    标签: mongodb


    【解决方案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"
        }
    })
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-24
      • 2015-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-29
      相关资源
      最近更新 更多