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

MongoDB如何合并统计ANumberAreaCode和BNumberAreaCode的区号出现总次数

MongoDB 区号总出现次数聚合查询方案

你可以通过单条聚合管道直接完成统计,不需要单独执行两次分组再合并,效率更高,完整查询如下:

db.collection.aggregate([
  // 构造包含两个区号字段的数组
  {
    $project: {
      areaCodes: ["$ANumberAreaCode", "$BNumberAreaCode"],
      _id: 0
    }
  },
  // 拆分数组为独立文档
  { $unwind: "$areaCodes" },
  // 按区号分组统计总次数
  {
    $group: {
      _id: "$areaCodes",
      total: { $sum: 1 }
    }
  },
  // 可选:调整输出格式为你需要的样式
  {
    $project: {
      _id: 0,
      result: { $concat: ["$_id", " : ", { $toString: "$total" }] }
    }
  }
])

执行逻辑说明

  • 首先通过$project把每条记录的两个区号字段整合成一个名为areaCodes的数组,相当于把同一条记录里的两个区号放到同一个集合里
  • 再用$unwind把数组拆分成多条独立文档,每个文档只包含一个区号,相当于把所有出现的区号都拉平成了一维列表
  • 最后按区号字段分组求和,就能直接得到每个区号在两个字段里的总出现次数

如果你坚持要基于你已经写好的两个分组结果合并,也可以用$facet一次性完成两次分组再合并统计,写法如下:

db.collection.aggregate([
  {
    $facet: {
      aCount: [
        { $group: { _id: "$ANumberAreaCode", count: { $sum: 1 } } }
      ],
      bCount: [
        { $group: { _id: "$BNumberAreaCode", count: { $sum: 1 } } }
      ]
    }
  },
  // 合并两个分组的结果数组
  { $project: { allCounts: { $concatArrays: ["$aCount", "$bCount"] } } },
  { $unwind: "$allCounts" },
  // 二次分组求和得到总次数
  {
    $group: {
      _id: "$allCounts._id",
      total: { $sum: "$allCounts.count" }
    }
  }
])

两种写法的最终统计结果完全一致,都会输出你需要的内容:

+98 : 3
+44 : 1
+1 :1
+96 :1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:24:04