今回は、検索条件に年齢を加えて集計を行います。
サンプルデータ
以前用意した会社の部、課、従業員データを使用します。
集計処理(aggregate)①データ準備 - https://ailog.site/2021/09/02/2021/0902/
検索条件を追加して課ごとの給料合計
集計時の検索条件を追加する場合は$matchを使います。
従業員コレクション(employee)から、年齢が35歳以上の従業員を対象として課ごとの給料合計を表示します。
[Mongoシェル]
1 | > db.employee.aggregate([ |
35歳以上の従業員の給料合計を、課ごとに集計できました。
groupとmatchの順番を入れ替える
$groupと$matchの順番は入れ替えることができます。
先ほど実行した集計に関して、$groupと$matchの順番を入れ替えて実行してみます。
[Mongoシェル]
1 | > db.employee.aggregate([ |
何も結果が返ってきませんでした。どうしてでしょうか。
理由は、aggregateではクエリーを上から順番に実行しているためです。
まず、$groupで課ごとに集計作業が実行されて_idとsalary_totalのフィールドのみの結果になります。
次にageフィールドで検索を行っても、ageフィールドがないため検索結果がないということになります。
$groupと$matchは順番を変えたり、複数回指定することが可能ですが、その順番には気を付けましょう。
Pythonで操作
上記の集計処理をPythonで行うと、次のようになります。
[ソースコード]
1 | import pymongo |
次回は、集計した結果に対して検索を行います。