我有一个使用 MongoDB 编写的分析 API。这是我的会话模型const sessionSchema = new Schema( { user: { id: Number, name: String, email: String }, }, { timestamps: true },);我想按日期计算唯一用户数。对于 2019 年 10 月 24 日,可能有来自两个用户的 10 个会话(id 1,id 2)和对于 2019 年 10 月 25 日,可能有来自两个用户的 20 个会话(id 3,id 8)所以我的预期结果是2019-10-24 2 用户2019-10-25 2 用户我试过这个db.Session.aggregate([ { $group: { _id: { user: '$user.id', day: { $dayOfYear: '$createdAt' } }, count: { $sum: 1 }, }, }, ])这似乎不起作用。我的createdAt字段类型是Date(eg:- createdAt: 2019-10-16T13:11:17.935Z) 这就是为什么我使用$dayOfYear: '$createdAt'
2 回答
![?](http://img1.sycdn.imooc.com/545868550001f60202200220-100-100.jpg)
慕后森
TA贡献1802条经验 获得超5个赞
db.Session.aggregate([
{
$project: {
date: { $dateToString: { format: "%Y-%m-%d", date: "$createdAt" } }
}
},
{
$group: {
_id: "$date" ,
count: { $sum: 1 }
}
}
]);
![?](http://img1.sycdn.imooc.com/5333a1d100010c2602000200-100-100.jpg)
饮歌长啸
TA贡献1951条经验 获得超3个赞
首先根据createdAt分组,因为我们想要根据 createdAt 的最终结果。
在这个$group阶段只需将userIds推入数组,使用$addToSet以保持它的唯一性。
然后$size在$projectstage 中使用operator 获取 userIds 的计数。
你得到结果。
这是查询。
(根据需要转换日期,它只是一种格式,您已经完成了此操作,因此我将跳过此任务)。
db.sessions.aggregate({$match:{}},
{$group:{_id: "$createdAt", userId : {$addToSet: "$user.id"}}},
{$project:{_id: 1, noOfUsers:{$size:"$userId"}}}).pretty()
希望这可以帮助!
添加回答
举报
0/150
提交
取消