Mongoose如何统计上周每日新增的用户数量?
实现方案
直接使用MongoDB的聚合查询能力实现按日期分组统计,不需要额外遍历全量数据,性能更高。
完整实现代码
var d = new Date(); d.setDate(d.getDate() - 7); // 聚合查询 const stats = await User.aggregate([ // 第一步:筛选过去7天新增的用户 { $match: { createdAt: { $gt: d } } }, // 第二步:按日期分组统计数量 { $group: { _id: { // 把createdAt转为DD-MM-YYYY格式的字符串,和你需要的键格式完全匹配 $dateToString: { format: "%d-%m-%Y", date: "$createdAt" } }, count: { $sum: 1 } } } ]) // 把聚合返回的数组转为期望的对象结构 const userCount = {} stats.forEach(item => { userCount[item._id] = item.count }) return res.status(200).json({ error: false, data: { user_count: userCount } })
注意事项
- 如果你需要按本地时区统计而不是UTC时区,需要在
$dateToString中添加时区参数,比如国内时区添加timezone: "Asia/Shanghai"即可:$dateToString: { format: "%d-%m-%Y", date: "$createdAt", timezone: "Asia/Shanghai" } - 如果某一天没有新增用户,返回结果中不会出现该日期的键,如果你需要补全7天所有日期、没有新增的默认值为0,可以在聚合后额外遍历最近7天的日期补全即可。
内容的提问来源于stack exchange,提问作者Al Imran Hossain
相关产品推荐
相关产品推荐

