【发布时间】:2019-11-04 04:38:23
【问题描述】:
我的数据库中有以下结构的文档:
{
"reading_ts": ISODate(...),
"points": 2.3,
"user_id": 2
}
对于每个 user_id,我每天都会有更多这样的文档……数以百万计…… 我想实现以下聚合:
- 获取一个月的数据
- 为每个 user_id 分组数据
- 对每一天的数据进行分组(这样我就有了每一天的数据,对于每个 user_id)
- 获取每个用户每天的最大“积分”
- 统计有多少用户的最大点数低于 10,有多少在 10 到 20 之间,有多少超过 20
我可以使用 $match 完成第 1 步 我可以使用这个来完成第 3 步:
{
"$group": {
"_id": {
"$subtract": [
"$reading_ts",
{
"$mod": [
{
"$toLong": "$reading_ts"
},
(1000 * 60 * 60 * 24)
]
}
]
}
}
}
问题是我现在不知道如何合并步骤 2 和 3。
【问题讨论】: