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

MongoDB分组聚合咨询:基于稻米平均尺寸分组计数的实现方法

修正后的MongoDB聚合管道方案

你的代码存在多处语法和逻辑错误,以下是符合需求的正确实现:

方案一:使用$bucket阶段(推荐,更直观)

$bucket可直接根据数值区间分组,适配你的分组规则:

db.rice.aggregate([
  // 计算每个稻米的两个产地尺寸平均值
  {
    $addFields: {
      average_size: { $divide: [{ $add: ["$size_A", "$size_B"] }, 2] }
    }
  },
  // 按平均尺寸区间分组并统计数量
  {
    $bucket: {
      groupBy: "$average_size",
      boundaries: [0, 3, 10, Infinity],
      default: "其他",
      output: {
        num_rice: { $sum: 1 },
        // 若需保留组内稻米标题,可添加此行
        // titles: { $push: "$title" }
      }
    }
  },
  // 按分组区间升序排序(可选)
  { $sort: { _id: 1 } }
])

方案二:使用$cond生成分组标识后分组

如果需要自定义分组名称,可先通过$cond生成分组标签再统计:

db.rice.aggregate([
  // 计算平均尺寸并生成分组标签
  {
    $addFields: {
      average_size: { $divide: [{ $add: ["$size_A", "$size_B"] }, 2] },
      group_tag: {
        $cond: [
          { $lt: ["$average_size", 3] },
          "第一组(平均尺寸<3)",
          {
            $cond: [
              { $lt: ["$average_size", 10] },
              "第二组(3≤平均尺寸<10)",
              "第三组(平均尺寸≥10)"
            ]
          }
        ]
      }
    }
  },
  // 按分组标签统计数量
  {
    $group: {
      _id: "$group_tag",
      num_rice: { $sum: 1 },
      // 可选:计算组内平均尺寸的均值
      avg_group_size: { $avg: "$average_size" }
    }
  },
  // 按分组排序
  { $sort: { _id: 1 } }
])

关键修正说明:

  • 尺寸平均值计算:需用$add求和后除以2,$avg不能直接接收字段数组参数
  • 分组逻辑:通过$bucket或$cond实现区间分组,而非错误设置_id数组
  • 数量统计:$group阶段用$sum:1计数,$count是独立聚合阶段,不能用于$group内部
  • 语法规范:聚合管道为数组结构,每个阶段必须是独立对象

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:31:09