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

MongoDB聚合查询优化:多companyID分组统计需求及问题

解决MongoDB多companyID分组统计问题

我来帮你调整这个聚合查询,让它支持传入多个companyID并返回每个ID对应的统计结果。先拆解一下原来查询的问题:最后那个$group: {_id: null, ...}把所有结果都合并成了一条总记录,所以才会返回_id: null;而且原来的匹配条件只针对单个companyID,改成$in就能支持多个值了。

方案1:统计每个companyID下的总注册记录数

如果你的需求是每个公司的总注册条数(不管testID是否重复),可以简化查询,直接按companyID分组求和:

db.getCollection('reg').aggregate([
  {
    '$match': {
      'companyID': {'$in': [11, 5]}, // 这里传入多个目标companyID
      'created': {
        '$gte': 1556726597,
        '$lt': 1580572997
      }
    }
  },
  {
    '$group': {
      '_id': '$companyID', // 按companyID作为分组依据
      'totalRegistrations': {'$sum': 1} // 统计该公司的总注册记录数
    }
  }
])

返回结果示例:

{ "_id" : 11, "totalRegistrations" : 100.0 }
{ "_id" : 5, "totalRegistrations" : 75.0 }

方案2:统计每个companyID下的不同testID数量

如果你的需求和原查询逻辑一致,是统计每个公司下有多少个唯一的testID,就需要调整分组顺序:

db.getCollection('reg').aggregate([
  {
    '$match': {
      'companyID': {'$in': [11, 5]},
      'created': {
        '$gte': 1556726597,
        '$lt': 1580572997
      }
    }
  },
  {
    '$group': {
      '_id': {'companyID': '$companyID', 'testID': '$testID'} // 先按公司+testID分组,实现testID去重
    }
  },
  {
    '$group': {
      '_id': '$_id.companyID', // 再按companyID汇总
      'uniqueTestIDCount': {'$sum': 1} // 统计该公司的唯一testID数量
    }
  }
])

返回结果示例:

{ "_id" : 11, "uniqueTestIDCount" : 10.0 }
{ "_id" : 5, "uniqueTestIDCount" : 8.0 }

关键修改点说明

  • 把$match阶段的companyID: 11改成companyID: {$in: [xxx, yyy]},即可匹配多个公司ID
  • 移除了原查询最后一步_id: null的全局分组,改成按companyID分组,确保每个公司单独返回一条统计结果
  • 原查询中的$project步骤可以省略,MongoDB在分组时可以直接引用集合原字段

内容的提问来源于stack exchange,提问作者Jamal Westfield

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 07:04:11