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になってすべてのドキュメントが同一グループに集約されてしまうため注意が必要です。
-
PythonでMongoDBを操作する方法|pymongoを使った基本操作入門
MongoDBは広く利用されているドキュメント指向データベースであり、NoSQLデータベースの一種です。Pythonはpymongoなどのモジュールを介してMongoDBと連携し、データの作成や操作を行うことができます。本記事では、その具体的な方法を解説します。なお、PythonからMongoDBへ接続するには、システムにMongoDBがあらかじめインストールされている必要があります。MongoDBのセットアップ手順については、専用のチュートリアル記事をご参照ください。 pymongoのインストール MongoDBとやり取りするには、pymongoというモジュールが必要です。以下のコマンドを
-
MongoDBの集約(Aggregation)と投影(Projection)の使い方を解説
MongoDBの集約と投影とはMongoDBで特定のフィールドだけを抽出しながらデータを加工したい場合、aggregate()メソッドと$projectステージを組み合わせるのが効果的です。$projectは、パイプライン内で指定されたフィールドを持つドキュメントだけを次のステージへ渡す役割を果たします。この記事では、実際にコレクションを作成し、$match・$unwind・$sort・$group・$projectを組み合わせた集約パイプラインの具体的な使い方を解説します。サンプルコレクションの作成まず、insertOne()を使ってドキュメントを含むコレクションを作成します。> db