MongoDB で グループごと に データの最小値/最大値 を 集計する

0 件のコメント

今回は「MongoDB で グループごと に データの最小値/最大値 を 集計する 方法」についてまとめます。

MongoDB でグループ化に関する記事はほかにも以下のような記事がありますので参考にしていただければと思います。

前提データ

以下のデータを 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 の フォロー」 お願いします!!