我有一个员工名单,每个人都属于一个部门和一个公司。
员工也有工资历史。最后一个值是他们当前的薪水。
例子:
{
name: "Programmer 1"
employee_id: 1,
dept_id: 1,
company_id: 1,
salary: [50000,50100,50200]
},
{
name: "Programmer 2"
employee_id: 2,
dept_id: 1,
company_id: 1,
salary: [50000,50200,50300]
},
{
name: "Manager"
employee_id: 3,
dept_id: 2,
company_id: 1,
salary: [60000,60500,61000]
},
{
name: "Contractor (different company)"
employee_id: 4,
dept_id: 1,
company_id: 2,
salary: [60000,60500,75000]
}
我想找到员工当前的平均工资,按 dept_id 和 company_id 分组。
就像是:
db.employees.aggregate(
{ $project : { employee_id: 1, dept_id: 1, company_id: 1, salaries: 1}},
{ $unwind : "$salaries" },
{
"$group" : {
"_id" : {
"dept_id" : "$dept_id",
"company_id" : "$company_id",
},
current_salary_avg : { $avg : "$salaries.last()" }
}
}
);
在这种情况下,它将是
公司 1,组 1:50250
公司 1,组 2:61000
公司 2,组 1:75000
我已经看到使用 $unwind 执行类似操作的示例,但我正在努力获得薪水的最后一个值。在这种情况下,$slice 是正确的运算符吗?如果是,我该如何在项目中使用它?