You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用MongoDB聚合框架统计指定id的不同cate_id数量

使用MongoDB聚合框架实现按ID分组统计分类次数

嘿,这需求完全可以通过MongoDB的聚合管道一步步实现,我给你拆解一下具体怎么做:

首先,我们需要先按idcate_id的组合分组统计次数,再把同一id下的分类统计结果整理成数组,最后调整输出格式。直接上完整的聚合命令:

db.collection.aggregate([
  // 第一步:统计每个id下每个cate_id的出现次数
  {
    $group: {
      _id: {
        id: "$id",
        cate_id: "$cate_id"
      },
      count: { $sum: 1 }
    }
  },
  // 第二步:按id聚合,把分类统计结果整理成数组
  {
    $group: {
      _id: "$_id.id",
      categories: {
        $push: {
          cate_id: "$_id.cate_id",
          count: "$count"
        }
      }
    }
  },
  // 第三步:调整输出字段,让格式完全匹配你的期望
  {
    $project: {
      _id: 0,
      id: "$_id",
      categories: 1
    }
  }
])

我给你解释下每个阶段的作用:

  • 第一个$group:把相同id+相同cate_id的文档归为一组,用$sum:1统计每组的文档数量,这样就能得到每个id下每个分类的出现次数。
  • 第二个$group:这次只按id分组,用$push操作把上一步得到的cate_idcount打包成对象,逐个添加到categories数组里。
  • 第三个$project:用来调整输出格式——把聚合生成的_id(也就是我们要的业务id)重命名为id,同时去掉默认的_id字段,最终输出就和你想要的一模一样了。

用你提供的样本数据运行这个命令,就能得到:

{ "id": 49893861, "categories": [ { "cate_id": "1102", "count": 2 }, { "cate_id": "81614", "count": 1 } ] }

内容的提问来源于stack exchange,提问作者Andy Ho

火山引擎 最新活动