我会尽量保持这一点。我有用户对象,在我的用户对象中我有一个字段,该字段只包含用户登录日期的ISOD。我想计算在特定日期登录的所有日期的用户数量
示例用户:
{
"_id": "some_id",
"name": "bob",
"logins": [isodate, isodate, isodate...],
//...
}
我想要一个输出,告诉我类似的东西:
{
"date": ISODate,
"number_of_users_logged_in": 10
}
这可能吗?我该怎么做呢?
答案 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"
}
})
我按年/月/日/小时分组。