Mongoose中如何按date字段分组并统计各分组的rating平均值
代码修改方案
你当前的聚合查询里$group阶段的_id设置为null,代表将所有匹配的文档统一合并为一组统计,只要将_id指定为你要分组的字段$date即可实现按日期分组统计:
Post.aggregate([ { $group: { _id: "$date", // 按date字段的值分组 avgRating: { $avg: "$rating" }, postCount: { $sum: 1 } // 可选:额外统计当日post总数,按需添加 } }, { $sort: { _id: 1 } // 可选:按日期升序排列结果,如需倒序改为-1 } ]) .then(function (res) { // 此时res是数组,每一项对应一个日期的统计结果,结构如下: // [{ _id: '2024-05-20', avgRating: 4.2, postCount: 12 }, ...] res.forEach(item => { console.log(`日期${item._id}的平均评分:${item.avgRating}`) }) })
注意事项
- 如果你的
date字段存储的是带时分秒的时间字符串,会精确到时分秒分组,如果你需要按天分组但字符串格式包含更细粒度的时间,需要先通过$dateToString之类的操作统一格式化日期(你这里Schema的default是格式化后的当天日期,所以直接用$date分组即可) - 统计返回的
avgRating默认是浮点数,你可以按需用$round操作保留指定小数位数
内容的提问来源于stack exchange,提问作者eneda
相关产品推荐
相关产品推荐

