MongoDB如何按日期分组统计总销量及排除指定销售经理的自有销量
MongoDB 按日期分组统计实现方案
使用MongoDB聚合管道即可实现所有需求,完整查询代码如下:
// 替换为你需要排除的销售经理实际ObjectId值 const excludeManagerId = ObjectId("你的排除目标salesManagerId"); db.你的集合名.aggregate([ { $group: { // 直接将日期格式化为YYYYMMDD格式作为分组键 _id: { $dateToString: { format: "%Y%m%d", date: "$createdAt" } }, // 统计分组内总文档数,等价于COUNT(*) Sales: { $sum: 1 }, // 统计自有销量,排除包含指定销售经理ID的文档 "Own Sales Volume": { $sum: { $cond: [ { $not: { $in: [excludeManagerId, "$details.salesManagerId"] } }, 1, 0 ] } } } }, { // 按日期倒序排列,最新日期在前 $sort: { _id: -1 } }, { // 调整输出字段名匹配预期格式 $project: { _id: 0, Date: "$_id", Sales: 1, "Own Sales Volume": 1 } } ])
关键逻辑说明
- 日期分组通过
$dateToString操作符直接实现,不需要手动拆分年/月/日再拼接,输出格式正好匹配你要求的20211020样式 - 自有销量通过
$cond条件判断实现:当details数组中不存在要排除的销售经理ID时计数+1,否则+0 - 排序阶段直接对格式化后的日期字符串倒序,即可得到你需要的日期从新到旧的排列效果
内容的提问来源于stack exchange,提问作者newbieeyo
相关产品推荐
相关产品推荐

