MongoDBのアグリゲーションで最小値・最大値を取得する方法
MongoDBのアグリゲーションで最小値・最大値を求める
MongoDBでコレクション内の数値フィールドから最小値や最大値を取得したい場合、アグリゲーションパイプラインで使用できる $min 演算子と $max 演算子を活用します。これらは $group ステージと組み合わせることで、コレクション全体に対する集計処理を簡単に実現できます。
本記事では、サンプルコレクションを作成し、実際に最小値・最大値を取得する手順を解説します。
1. サンプルコレクションの作成
まず、insertOne() メソッドを使ってドキュメントを登録したコレクションを作成します。
> db.demo251.insertOne({"Marks":78});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e46c0001627c0c63e7dba74")
}
> db.demo251.insertOne({"Marks":87});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e46c0031627c0c63e7dba75")
}
> db.demo251.insertOne({"Marks":56});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e46c0061627c0c63e7dba76")
}
> db.demo251.insertOne({"Marks":76});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e46c00c1627c0c63e7dba77")
}2. 登録したドキュメントの確認
find() メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。
> db.demo251.find();
上記のコマンドを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e46c0001627c0c63e7dba74"), "Marks" : 78 }
{ "_id" : ObjectId("5e46c0031627c0c63e7dba75"), "Marks" : 87 }
{ "_id" : ObjectId("5e46c0061627c0c63e7dba76"), "Marks" : 56 }
{ "_id" : ObjectId("5e46c00c1627c0c63e7dba77"), "Marks" : 76 }3. アグリゲーションによる最小値・最大値の取得
続いて、aggregate() メソッドを使用して最小値と最大値を同時に取得するクエリを実行します。ポイントは以下の通りです。
$groupステージで_idをnullに設定すると、コレクション全体をひとつのグループとして集計できます。$max演算子で「Marks」フィールドの最大値を取得します。$min演算子で「Marks」フィールドの最小値を取得します。
> db.demo251.aggregate([
... { "$group": {
... "_id": null,
... "MaxMarks": { "$max": "$Marks" },
... "MinMarks": { "$min": "$Marks" }
... }}
...])このクエリを実行すると、次のような結果が出力されます。
{ "_id" : null, "MaxMarks" : 87, "MinMarks" : 56 }まとめ
このように、MongoDBでは $group ステージに $max と $min を組み合わせることで、単一のクエリで最小値と最大値を効率的に取得できます。_id: null を指定すればコレクション全体の集計となり、特定のフィールド(例:科目名やカテゴリ)を指定すればグループごとの集計も可能です。データ分析やレポート作成の際にぜひ活用してください。
-
【MongoDB】aggregate()と$groupで異なるドキュメント内の同じIDを持つ要素を集約する方法
複数のドキュメントにまたがって同じIDを持つ要素をグループ化したい場合には、MongoDBの aggregate() メソッドと $group ステージを組み合わせるのが効果的です。本記事では、実際にサンプルコレクションを作成しながら、IDごとにドキュメントを集約する手順をわかりやすく解説します。1. サンプルコレクションの作成まずは動作確認用のコレクションを作成し、ドキュメントを挿入していきます。ここでは「id」と「Name」というフィールドを持つドキュメントを6件登録します。> db.demo602.insertOne({id:1,Name:"Chris"});{
-
MongoDBの集計パイプラインで複数フィールドをカウントする方法($facet活用)
MongoDBで複数のフィールドごとにドキュメントをカウントしたい場合、$facet演算子を使うのが効果的です。$facetは、同じ入力ドキュメント群に対して、単一のステージ内で複数の集計パイプラインを同時に処理できる強力な機能です。この記事では、実際にコレクションを作成し、$facetを組み合わせた集計クエリで複数フィールドの値をカウントする手順を解説します。1. サンプルコレクションの作成まず、insertOne()メソッドを使ってサンプルドキュメントを挿入します。各ドキュメントにはdetails1・details2・details3という3つのネストされたフィールドを持たせます。>