MongoDB(21) - 集計処理(aggregate)②合計($sum)

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

サンプルデータ

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

集計処理(aggregate)①データ準備 - https://ailog.site/2021/09/02/2021/0902/

課ごとの給料合計

指定したフィールドで集計を行うためにはaggregateの引数に$groupを指定し、集計条件を設定します。

合計を表示するためには$sumを集計条件に指定します。

従業員コレクション(employee)から、課ごとの給料合計を表示してみます。

[Mongoシェル]

1
2
3
4
5
6
7
> db.employee.aggregate([
{$group:{_id:"$k_id", salary_total:{$sum:"$salary"}}}
])
{ "_id" : "ka1", "salary_total" : 400000 }
{ "_id" : "ka3", "salary_total" : 750000 }
{ "_id" : "ka4", "salary_total" : 220000 }
{ "_id" : "ka2", "salary_total" : 250000 }

集計条件の設定内容は以下の通りです。

  • _idに指定したフィールド($k_id)で集計を行います。
    フィールドは“$フィールド名”と先頭に$を追加して指定します。
    SQLだと[ group by k_id ]の意味です。
  • salary_totalは集計結果のフィールド名です。
    SQLだと[ select salary_total ]の意味です。
  • 集計関数として$sumを指定し、集計するフィールドは“$フィールド名”と先頭に$を追加して設定します。
    SQLだと[ sum(salary) ]の意味です。

SQLに慣れている人ですと、フィールド名の先頭に$をつけたり、記述がやや込み入って見えたりするかもしれませんが、1つ1つ対応関係を確認すれば読み解けるかと思います。

Pythonで操作

上記の集計処理をPythonで行うと、次のようになります。

[ソースコード]

1
2
3
4
5
6
7
8
9
10
11
12
13
import pymongo
from pymongo import MongoClient

# MongoDB操作用のインスタンスを作成
client = MongoClient() # [IPとポートを指定する場合] MongoClient('10.200.243.203', 27017')

# データベースの取得
db1 = client.db1

# 課ごとの給料合計表示
docs = db1.employee.aggregate([{'$group':{'_id':'$k_id', 'salary_total':{'$sum':'$salary'}}}])
for doc in docs:
print(doc)

次回は、検索条件に年齢を加えて集計を行います。