MongoDB(20) - 集計処理(aggregate)①データ準備

今回から、MongoDBでの集計処理(aggretate)を行っていきます。

今回は前準備として集計動作確認用のデータを作成します。

サンプルデータ

会社の部、課、従業員を想定したデータを用意します。

データのイメージは次の通りです。

  • 課は1つの部に所属します。
  • 従業員は1つの課に所属します。
  • 従業員は1つの役職を持ちます。

部のデータ作成

部のデータを作成します。コレクション名はdepartmentです。

[Mongoシェル]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
> db.department.insertMany([
{b_id:"bu1", name:"総務部"},
{b_id:"bu2", name:"企画部"},
{b_id:"bu3", name:"開発部"}
])
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("612f075468110fe533ed9d16"),
ObjectId("612f075468110fe533ed9d17"),
ObjectId("612f075468110fe533ed9d18")
]
}

> db.department.find({}, {_id:0})
{ "b_id" : "bu1", "name" : "総務部" }
{ "b_id" : "bu2", "name" : "企画部" }
{ "b_id" : "bu3", "name" : "開発部" }

課のデータ作成

課のデータを作成します。コレクション名はdivisionです。

b_idフィールドは所属する部署を表します。

[Mongoシェル]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
> db.division.insertMany([
{k_id:"ka1", b_id:"bu1", name:"総務課"},
{k_id:"ka2", b_id:"bu2", name:"企画課"},
{k_id:"ka3", b_id:"bu3", name:"開発1課"},
{k_id:"ka4", b_id:"bu3", name:"開発2課"}
])
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("612f07b568110fe533ed9d19"),
ObjectId("612f07b568110fe533ed9d1a"),
ObjectId("612f07b568110fe533ed9d1b"),
ObjectId("612f07b568110fe533ed9d1c")
]
}

> db.division.find({}, {_id:0})
{ "k_id" : "ka1", "b_id" : "bu1", "name" : "総務課" }
{ "k_id" : "ka2", "b_id" : "bu2", "name" : "企画課" }
{ "k_id" : "ka3", "b_id" : "bu3", "name" : "開発1課" }
{ "k_id" : "ka4", "b_id" : "bu3", "name" : "開発2課" }

役職のデータ作成

役職のデータを作成します。コレクション名はpositionです。

[Mongoシェル]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
> db.position.insertMany([
{p_id:"po1", name:"社長"},
{p_id:"po2", name:"部長"},
{p_id:"po3", name:"課長"},
{p_id:"po4", name:"一般社員"}
])
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("612f07d768110fe533ed9d1d"),
ObjectId("612f07d768110fe533ed9d1e"),
ObjectId("612f07d768110fe533ed9d1f"),
ObjectId("612f07d768110fe533ed9d20")
]
}

> db.position.find({}, {_id:0})
{ "p_id" : "po1", "name" : "社長" }
{ "p_id" : "po2", "name" : "部長" }
{ "p_id" : "po3", "name" : "課長" }
{ "p_id" : "po4", "name" : "一般社員" }

従業員のデータ作成

従業員のデータを作成します。コレクション名はemployeeです。

k_idフィールドは所属する課を表し、p_idは役職を表します。

[Mongoシェル]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
> db.employee.insertMany([
{e_id:"emp001", k_id:"ka1", p_id:"po1", name:"高山", age:31, salary:400000},
{e_id:"emp002", k_id:"ka2", p_id:"po2", name:"生駒", age:37, salary:250000},
{e_id:"emp003", k_id:"ka3", p_id:"po3", name:"嘉喜", age:23, salary:200000},
{e_id:"emp004", k_id:"ka4", p_id:"po4", name:"与田", age:33, salary:100000},
{e_id:"emp005", k_id:"ka3", p_id:"po4", name:"松田", age:35, salary:550000},
{e_id:"emp006", k_id:"ka4", p_id:"po4", name:"菅井", age:45, salary:120000}
])
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("612f07f568110fe533ed9d21"),
ObjectId("612f07f568110fe533ed9d22"),
ObjectId("612f07f568110fe533ed9d23"),
ObjectId("612f07f568110fe533ed9d24"),
ObjectId("612f07f568110fe533ed9d25"),
ObjectId("612f07f568110fe533ed9d26")
]
}

> db.employee.find({}, {_id:0})
{ "e_id" : "emp001", "k_id" : "ka1", "p_id" : "po1", "name" : "高山", "age" : 31, "salary" : 400000 }
{ "e_id" : "emp002", "k_id" : "ka2", "p_id" : "po2", "name" : "生駒", "age" : 37, "salary" : 250000 }
{ "e_id" : "emp003", "k_id" : "ka3", "p_id" : "po3", "name" : "嘉喜", "age" : 23, "salary" : 200000 }
{ "e_id" : "emp004", "k_id" : "ka4", "p_id" : "po4", "name" : "与田", "age" : 33, "salary" : 100000 }
{ "e_id" : "emp005", "k_id" : "ka3", "p_id" : "po4", "name" : "松田", "age" : 35, "salary" : 550000 }
{ "e_id" : "emp006", "k_id" : "ka4", "p_id" : "po4", "name" : "菅井", "age" : 45, "salary" : 120000 }

以上で、集計動作確認用のデータの準備ができました。


次回は、簡単な集計として従業員の課ごとの給料合計を集計してみます。