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

MongoDB按海拔区间分组聚合并汇总面积字段的需求

如何按指定海拔区间分组并汇总MongoDB文档的area属性?

嘿,我来帮你搞定这个MongoDB聚合需求!针对你的分组规则和输出要求,我们可以用MongoDB的$bucket聚合阶段来精准实现区间分组,再配合简单的字段处理来适配你的格式。

完整聚合管道代码

db.collection.aggregate([
  // 处理elevation为null的情况,确保能被正确归类
  {
    $addFields: {
      elevation: { $ifNull: ["$elevation", -1] }
    }
  },
  // 核心:按海拔区间分组并计算汇总值
  {
    $bucket: {
      groupBy: "$elevation",
      boundaries: [-Infinity, 0, 1501, 3001, Infinity],
      output: {
        count: { $sum: 1 },
        summarizedArea: { $sum: "$area" },
        // 生成对应的区间文本名称
        interval: {
          $switch: {
            branches: [
              { case: { $lt: ["$elevation", 0] }, then: "<0" },
              { case: { $and: [{ $gte: ["$elevation", 0] }, { $lt: ["$elevation", 1501] }] }, then: "0-1500" },
              { case: { $and: [{ $gte: ["$elevation", 1501] }, { $lt: ["$elevation", 3001] }] }, then: "1501-3000" },
              { case: { $gte: ["$elevation", 3001] }, then: ">3000" }
            ],
            default: "<0"
          }
        }
      }
    }
  },
  // 调整输出格式,移除不需要的_id字段
  {
    $project: {
      _id: 0,
      interval: 1,
      count: 1,
      summarizedArea: 1
    }
  }
])

逐阶段解释

  1. $addFields 处理空值
    你的数据里有一个elevation为null的文档,我们用$ifNull把它转换成-1,这样它会被自动归到<0的区间里,避免因为空值无法匹配任何区间而被分到默认组。

  2. $bucket 区间分组
    这是实现需求的核心步骤:

    • groupBy: "$elevation":指定按海拔字段分组
    • boundaries:定义了区间的分界点,完美对应你的四个分组规则:
      • [-Infinity, 0) → <0组
      • [0, 1501) → 0-1500组
      • [1501, 3001) → 1501-3000组
      • [3001, Infinity) → >3000组
    • output里我们完成三个关键计算:
      • count: { $sum: 1 }:统计每个组的文档数量
      • summarizedArea: { $sum: "$area" }:汇总每个组的area总和
      • 用$switch根据海拔值生成对应的区间文本名称,确保输出的interval字段完全符合你的预期。
  3. $project 调整输出格式
    $bucket会自动生成一个_id字段(值为区间的下界),我们用$project移除这个字段,只保留需要的interval、count和summarizedArea,让输出完全匹配你给出的示例格式。

最终输出结果

针对你提供的原始数据,运行上述聚合后会得到:

[
  { "interval": "<0", "count": 1, "summarizedArea": 5 },
  { "interval": "0-1500", "count": 1, "summarizedArea": 12 },
  { "interval": "1501-3000", "count": 2, "summarizedArea": 60 }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:16:59