MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBで時間ごとに$avgを使って集計する方法

MongoDBで時間ごとに$avgを使って集計する方法

MongoDBで集計処理を行うには、aggregate()メソッドを使用します。このメソッドを利用することで、コレクション内のデータに対して平均値や合計値などの集計を簡単に計算できます。本記事では、日付型フィールドから「時」を抽出し、時間単位で$avg演算子により平均値を求める手順を、サンプルコード付きで解説します。

1. サンプルコレクションの作成

まず、insertOne()メソッドでドキュメントを挿入し、コレクションを作成しましょう。

> db.demo544.insertOne({"DueTime":new ISODate("2020-01-10 12:10:20"),Amount:100});{
     "acknowledged" : true,
     "insertedId" : ObjectId("5e8e1f029e5f92834d7f05ce")
}
> db.demo544.insertOne({"DueTime":new ISODate("2020-01-12 12:00:00"),Amount:500});{
     "acknowledged" : true,
     "insertedId" : ObjectId("5e8e1f089e5f92834d7f05cf")
}
> db.demo544.insertOne({"DueTime":new ISODate("2020-01-12 12:10:20"),Amount:900});{
     "acknowledged" : true,
     "insertedId" : ObjectId("5e8e1f109e5f92834d7f05d0")
}

2. 登録したドキュメントの確認

find()メソッドを使えば、コレクション内のすべてのドキュメントを表示できます。

> db.demo544.find();

上記のコマンドを実行すると、次のような出力が得られます。

{ "_id" : ObjectId("5e8e1f029e5f92834d7f05ce"), "DueTime" : ISODate("2020-01-10T12:10:20Z"), "Amount" : 100 }
{ "_id" : ObjectId("5e8e1f089e5f92834d7f05cf"), "DueTime" : ISODate("2020-01-12T12:00:00Z"), "Amount" : 500 }
{ "_id" : ObjectId("5e8e1f109e5f92834d7f05d0"), "DueTime" : ISODate("2020-01-12T12:10:20Z"), "Amount" : 900 }

3. 時間ごとに$avgで集計するクエリ

以下が、「時」単位でグループ化し、Amountフィールドの平均値を求める集計クエリです。

> db.demo544.aggregate({ "$group": { "_id": { "$hour": "$DueTime" }, "Amount": { "$avg": "$Amount" } }})

実行すると、次のような結果が出力されます。

{ "_id" : 12, "Amount" : 500 }

4. クエリの仕組み

  • $hour:日付フィールドから時(0〜23)を抽出します。
  • $group:抽出した時の値をキーとして、ドキュメントをグループ化します。
  • $avg:各グループ内のAmountフィールドの平均値を計算します。

今回のサンプルでは、3件すべてのドキュメントの時刻が「12時台」であるため、1つのグループにまとめられ、(100 + 500 + 900) ÷ 3 = 500という平均値が出力されています。

注意点:フィールド名の大文字・小文字

MongoDBのフィールド名は大文字・小文字が区別されます。「DueTime」というフィールドを参照する場合は、「$DueTime」と正確に一致させてください。誤って「$dueTime」のように記述すると、該当フィールドが存在しないものとみなされ、_idがnullになってすべてのドキュメントが同一グループに集約されてしまうため注意が必要です。

  1. PythonでMongoDBを操作する方法|pymongoを使った基本操作入門

    MongoDBは広く利用されているドキュメント指向データベースであり、NoSQLデータベースの一種です。Pythonはpymongoなどのモジュールを介してMongoDBと連携し、データの作成や操作を行うことができます。本記事では、その具体的な方法を解説します。なお、PythonからMongoDBへ接続するには、システムにMongoDBがあらかじめインストールされている必要があります。MongoDBのセットアップ手順については、専用のチュートリアル記事をご参照ください。 pymongoのインストール MongoDBとやり取りするには、pymongoというモジュールが必要です。以下のコマンドを

  2. MongoDBの集約(Aggregation)と投影(Projection)の使い方を解説

    MongoDBの集約と投影とはMongoDBで特定のフィールドだけを抽出しながらデータを加工したい場合、aggregate()メソッドと$projectステージを組み合わせるのが効果的です。$projectは、パイプライン内で指定されたフィールドを持つドキュメントだけを次のステージへ渡す役割を果たします。この記事では、実際にコレクションを作成し、$match・$unwind・$sort・$group・$projectを組み合わせた集約パイプラインの具体的な使い方を解説します。サンプルコレクションの作成まず、insertOne()を使ってドキュメントを含むコレクションを作成します。> db