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

MongoDB聚合查询修改:如何添加组内最低工资员工姓名

解决方案

要在聚合结果中添加每个部门薪资最低的男性员工的firstName,需要对原聚合查询的$group阶段进行扩展,并新增$project阶段来提取目标数据,具体修改如下:

修改后的聚合查询语句

db.employees.aggregate([
    { $match: { gender: 'male' } },
    {
        $group: {
            _id: { deptName: '$department.name' },
            totalEmployees: { $sum: 1 },
            minSalary: { $min: '$salary' }, // 统计部门内最低薪资
            employeeList: { $push: { salary: '$salary', firstName: '$firstName' } } // 收集部门内所有员工的薪资和姓名
        }
    },
    {
        $project: {
            _id: 1,
            totalEmployees: 1,
            lowestSalaryEmployee: {
                // 过滤出薪资等于最低薪资的员工,取第一个的firstName
                $arrayElemAt: [
                    { $map: { input: { $filter: { input: '$employeeList', cond: { $eq: ['$$this.salary', '$minSalary'] } } }, as: 'emp', in: '$$emp.firstName' } },
                    0
                ]
            }
        }
    },
    { $sort: { '_id.deptName': 1 } }
])

语句说明

  1. $match阶段:保持原逻辑,仅筛选男性员工。
  2. $group阶段:
    • 新增minSalary字段,用$min运算符获取当前部门的最低薪资。
    • 新增employeeList字段,用$push将部门内每个员工的薪资和姓名存入数组。
  3. $project阶段:
    • 通过$filter从employeeList中筛选出薪资等于minSalary的员工记录。
    • 用$map将筛选后的记录转换为仅包含firstName的数组。
    • 最后用$arrayElemAt取出数组中的第一个姓名(若存在多名薪资相同的最低薪员工,可根据需求调整为返回数组)。
  4. $sort阶段:调整排序字段为_id.deptName,确保按部门名称升序排列。

预期输出

[
  { _id: { deptName: 'Finance' }, totalEmployees: 2, lowestSalaryEmployee: 'Kapil' },
  { _id: { deptName: 'HR' }, totalEmployees: 1, lowestSalaryEmployee: 'John' },
  { _id: { deptName: 'Marketing' }, totalEmployees: 2, lowestSalaryEmployee: 'Amitabh' }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 08:18:35