我正在使用mongodb来保存邮件。 以这种格式保存的消息
{
userId: String,
date: Date,
message: String
}
现在我希望获得范围内的所有每日活跃用户ID。我想只用聚合做。可以有人说我最优雅的方式做这样的聚合,它必须尽可能快地工作。
我想到的第一个想法是按日期对所有消息进行分组,并获取所有日期的usersIds,然后使用循环过滤每日活跃用户,但这不是好方法,并且工作缓慢。问题是我不想在没有聚合的情况下做任何事情。所以聚合必须返回类似这样的东西
{
dayOfYear: Number,
users: [ String ]
}
答案 0 :(得分:1)
我认为这是解决问题的最快方法:
db.gor.aggregate([{
$group : {
_id : {
year : {
$year : "$date"
},
dayOfYear : {
$dayOfYear : "$date"
}
},
users : {
$addToSet : "$userId"
}
}
}
])
欢迎任何评论!
答案 1 :(得分:0)
{{1}}