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

求助:MongoDB多字段范围分组聚合查询,统计指定组价格总和

MongoDB多字段范围分组统计价格总和

示例文档

[
  { Age: 10, BPM: 20, Price: 6 },
  { Age: 12, BPM: 30, Price: 9 },
  { Age: 15, BPM: 40, Price: 6 },
  { Age: 10, BPM: 46, Price: 7 },
  { Age: 20, BPM: 60, Price: 8 }
]

聚合查询方案

使用MongoDB聚合框架,通过$switch判断文档所属的自定义分组,再按分组统计价格总和:

db.collection.aggregate([
  // 为每个文档标记所属分组
  {
    $addFields: {
      groupKey: {
        $switch: {
          branches: [
            // 分组1:年龄10-15 且 BPM20-50
            {
              case: {
                $and: [
                  { $gte: ["$Age", 10] },
                  { $lte: ["$Age", 15] },
                  { $gte: ["$BPM", 20] },
                  { $lte: ["$BPM", 50] }
                ]
              },
              then: "Age 10-15 & BPM 20-50"
            },
            // 分组2:年龄15-20 且 BPM40-90
            {
              case: {
                $and: [
                  { $gte: ["$Age", 15] },
                  { $lte: ["$Age", 20] },
                  { $gte: ["$BPM", 40] },
                  { $lte: ["$BPM", 90] }
                ]
              },
              then: "Age 15-20 & BPM 40-90"
            }
          ],
          // 不属于指定分组的文档归到"Other"组
          default: "Other"
        }
      }
    }
  },
  // 按分组统计价格总和
  {
    $group: {
      _id: "$groupKey",
      totalPrice: { $sum: "$Price" }
    }
  }
])

查询结果

针对示例文档执行上述查询,会得到以下结果:

[
  { "_id": "Age 10-15 & BPM 20-50", "totalPrice": 28 },
  { "_id": "Age 15-20 & BPM 40-90", "totalPrice": 14 }
]

自定义调整说明

如果需要新增分组或修改范围,直接在$switch的branches数组中添加或修改分支即可。每个分支用$and组合多字段的范围条件,then定义分组名称。

内容的提问来源于stack exchange,提问作者Md. Rubel Mia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 13:01:13