それぞれが部門と会社に所属する従業員のリストがあります。
従業員には給与履歴もあります。最後の値は現在の給与です。
例:
{
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 は正しい演算子ですか? もしそうなら、プロジェクトでどのように使用しますか?