1

それぞれが部門と会社に所属する従業員のリストがあります。

従業員には給与履歴もあります。最後の値は現在の給与です。

例:

{
  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 は正しい演算子ですか? もしそうなら、プロジェクトでどのように使用しますか?

4

2 に答える 2

0

$slice を集計で使用できるようになりました。配列の先頭または末尾から{ $slice: [ <array>, <n> ] } 要素を返すには: 配列内の指定された位置から要素を返すには: { $slice: [ <array>, <position>, <n> ] }.

そしてmongoページからのいくつかの例:

{ $slice: [ [ 1, 2, 3 ], 1, 1 ] }   // [ 2 ]
{ $slice: [ [ 1, 2, 3 ], -2 ] }     // [ 2, 3 ]
{ $slice: [ [ 1, 2, 3 ], 15, 2 ] }  // [  ]
{ $slice: [ [ 1, 2, 3 ], -15, 2 ] } // [ 1, 2 ]
于 2015-11-09T06:54:07.550 に答える