今回は「MongoDB で グループごと に データの最小値/最大値 を 集計する 方法」についてまとめます。
MongoDB でグループ化に関する記事はほかにも以下のような記事がありますので参考にしていただければと思います。
- グループごとにデータ件数を集計する ( $group count )
- グループごとにデータの合計値を集計する ( $group sum )
- グループごとにデータの最小値/最大値を集計する ( $group min/max ) ← 今回の記事
- グループごとにデータの平均/標準偏差/分散を集計する ( $group avg/stddev/var )
前提データ
以下のデータを mongo コマンドで投入してある状態で各 item について集計を行っていきます。
1 2 3 4 5 6 7 8 9 10 11 12 | > db.orders.insertMany([ { datetime: ISODate( "2017-12-15T12:00:00+09:00" ), item: "pen" , amount: 70 }, { datetime: ISODate( "2017-12-15T12:00:00+09:00" ), item: "note" , amount: 40 }, { datetime: ISODate( "2017-12-15T12:00:00+09:00" ), item: "eraser" , amount: 100 }, { datetime: ISODate( "2017-12-12T12:00:00+09:00" ), item: "note" , amount: 80 }, { datetime: ISODate( "2017-12-08T12:00:00+09:00" ), item: "eraser" , amount: 50 }, { datetime: ISODate( "2017-11-21T12:00:00+09:00" ), item: "eraser" , amount: 70 }, { datetime: ISODate( "2017-11-13T12:00:00+09:00" ), item: "pen" , amount: 20 }, { datetime: ISODate( "2017-11-02T12:00:00+09:00" ), item: "pen" , amount: 40 }, { datetime: ISODate( "2017-10-23T12:00:00+09:00" ), item: "pen" , amount: 30 }, { datetime: ISODate( "2017-10-18T12:00:00+09:00" ), item: "pen" , amount: 10 } ]); |
グループごとに最小値/最大値を集計(group min/max)
グループごとに集計するのでステージは $group
を使います。
$group
ステージで利用するオペレーターとしては最小値を求めるのが $min
、最大値を求めるのが $max
を使います。
$group
ステージで利用する $min
や $max
は引数を1つ(集計対象としたいフィールド名を指定する引数)しかとりません。
今回は単純なので早速コードを見てみましょう。
コード(index.js)
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 | var MongoClient = require( "mongodb" ).MongoClient; MongoClient.connect(URL, (err, client) => { if (err) { client.close(); return ; } var db = client.db( "sample" ); db.collection( "orders" ).aggregate([ { $group: { _id: "$item" , min: { $min: "$amount" }, max: { $max: "$amount" } } } ]).toArray().then((docs) => { console.log(docs); }). catch ((err) => { console.log(err); }).then(() => { client.close(); }); }); |
実行 & 結果
1 2 3 4 | > node .\index.js [ { _id: 'note' , min: 40, max: 80 }, { _id: 'eraser' , min: 50, max: 100 }, { _id: 'pen' , min: 10, max: 70 } ] |
今回は「MongoDB で グループごと に データの最小値/最大値 を 集計する 方法」についてまとめました。 ポイントは以下の通りです。
- 最小値は
{ $min: <key> }
- 最大値は
{ $max: <key> }
参考になったでしょうか? 本記事がお役に立っていると嬉しいです!!
最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!