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

如何使用MongoDB聚合管道查询各类型下收入最高的前10位人员

解决MongoDB按类型取收入Top10人员的聚合方案

嘿,这个需求用MongoDB的聚合框架就能完美实现,我给你一步步拆解具体的实现思路和查询语句:

核心思路

我们需要先按Type字段分组,把每个类型下的所有人员收入信息聚合到一起,然后在每个分组内对收入进行降序排序,最后截取前10条数据即可。

适用于MongoDB 5.2+版本的简洁写法

MongoDB 5.2新增了$sortArray操作符,能直接在数组上排序,让整个聚合流程更简洁:

db.your_collection_name.aggregate([
  // 第一步:按Type分组,收集每个类型下的人员姓名和收入
  {
    $group: {
      _id: "$Type",
      people: {
        $push: {
          person_name: "$Person_name",
          income: "$Income"
        }
      }
    }
  },
  // 第二步:对每个分组的人员数组按收入降序排序,然后取前10
  {
    $project: {
      type: "$_id", // 保留类型字段,让结果更直观
      top_10_highest_income: {
        $slice: [
          {
            $sortArray: {
              input: "$people",
              sortBy: { income: -1 } // -1表示降序,1为升序
            }
          },
          10 // 截取前10条
        ]
      },
      _id: 0 // 隐藏默认的_id字段
    }
  }
])

适用于MongoDB 5.2以下版本的兼容写法

如果你的MongoDB版本较低,不支持$sortArray,可以用$unwind+$sort+$group的组合来实现:

db.your_collection_name.aggregate([
  // 第一步:按Type和Person_name分组(确保每个人员唯一)
  {
    $group: {
      _id: { type: "$Type", name: "$Person_name" },
      income: { $first: "$Income" }
    }
  },
  // 第二步:按Type分组,收集人员信息
  {
    $group: {
      _id: "$_id.type",
      people: {
        $push: {
          person_name: "$_id.name",
          income: "$income"
        }
      }
    }
  },
  // 第三步:拆分人员数组为单个文档
  { $unwind: "$people" },
  // 第四步:按Type分组,同时对组内人员按收入降序排序并取前10
  {
    $group: {
      _id: "$_id",
      top_10_highest_income: {
        $push: "$people"
      }
    }
  },
  // 第五步:排序并截取前10
  {
    $project: {
      type: "$_id",
      top_10_highest_income: {
        $slice: [
          { $sort: { "top_10_highest_income.income": -1 } },
          10
        ]
      },
      _id: 0
    }
  }
])

补充说明

  • 记得把your_collection_name替换成你实际的集合名称
  • 如果存在同一人员同一类型下多条收入记录的情况,建议在第一步分组时先按Type和Person_name聚合,用$sum或$first处理重复的收入(比如取总和或最新一条)
  • 排序时income字段如果是数值类型才能正确排序,确保你的数据类型是Number而非字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 11:18:10