You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB聚合查询调整:按Category分组并分别统计归档与未归档记录数

调整MongoDB聚合查询实现按分类统计归档/未归档数量

嗨,我来帮你修改这个聚合查询,让它输出你想要的格式~

你的核心需求是按category分组,每个分类下同时展示归档和未归档的记录数,而当前的查询是把category和isArchived作为联合分组键,所以每个分类会拆成两条记录。我们只需要调整$group阶段的逻辑,用条件求和来分别统计两种状态的数量即可。

修改后的完整查询代码

getStats() {
  const stats = this.noteModel.aggregate([
    {
      $group: {
        _id: '$category', // 仅按category字段分组
        archived: {
          // 统计isArchived为true的记录数:满足条件加1,否则加0
          $sum: { $cond: ['$isArchived', 1, 0] }
        },
        unArchived: {
          // 统计isArchived为false的记录数,两种写法都可以
          $sum: { $cond: [{ $eq: ['$isArchived', false] }, 1, 0] }
          // 或者用$not简化:$sum: { $cond: [{ $not: '$isArchived' }, 1, 0] }
        }
      }
    },
    {
      $project: {
        _id: 0, // 移除默认生成的_id字段
        category: '$_id', // 将分组键_id重命名为category
        archived: 1, // 保留archived字段
        unArchived: 1 // 保留unArchived字段
      }
    },
    { $sort: { category: 1 } } // 按分类名称排序,和原逻辑一致
  ]);
  return stats;
}

关键调整说明

  1. $group阶段优化:

    • 把_id改为仅使用$category,确保每个分类只生成一条记录
    • 使用$sum配合$cond条件表达式,分别统计两种isArchived状态的数量:
      • $cond的格式是[条件表达式, 满足时的值, 不满足时的值],这里满足条件就加1,不满足加0,最终累加得到对应状态的总数
  2. $project阶段调整:

    • 移除默认的_id字段,同时把分组用的_id重命名为category,让输出字段名完全匹配你的预期

用示例数据测试的输出结果

针对你提供的示例数据,修改后的查询会返回:

[
  { "category": "IDEA", "archived": 1, "unArchived": 2 },
  { "category": "TASK", "archived": 2, "unArchived": 1 }
]

完全符合你期望的格式。

内容的提问来源于stack exchange,提问作者Oleksandr Salivon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 15:52:45