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

MongoDB分组时限制$$ROOT仅保留前10条数据的实现问题

MongoDB 6.0.1分组时保留每组前10条数据的正确语法

针对你的需求,直接在$group阶段通过$push结合$slice即可实现只保留每组前10条$$ROOT数据,避免内存超限问题。以下是正确的实现方式:

完整聚合示例

db.collection.aggregate([
  // 可选:如果需要按特定顺序保留前10条,先执行排序(比如按创建时间倒序)
  {
    $sort: { createTime: -1 } // 根据你的实际需求调整排序字段和顺序
  },
  {
    $group: {
      _id: {
        DOG_RACE: '$DOG_RACE',
        FOOD: '$FOOD'
      },
      total: { $count: {} },
      _raw: {
        $push: {
          $each: ['$$ROOT'],
          $slice: 10 // 只保留前10条数据
        }
      }
    }
  }
])

错误原因说明

  • 直接用$slice作为_raw的定义:$group阶段要求字段值必须是累加器对象(如$push、$sum、$count等),$slice是数组操作符,不能单独作为累加器使用,因此报错。
  • 使用$firstN报错:$firstN作为聚合阶段可以单独使用,但作为累加器在$group中时,MongoDB 6.0.1的语法要求是{ $firstN: { n: 10, input: '$$ROOT' } },不过该累加器在部分场景下兼容性不如$push+$slice,且如果未正确排序,返回的结果顺序可能不符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 13:30:55