MongoDBの集計フレームワークで複数フィールドをグループ化するクエリの書き方
MongoDBで複数のフィールドを組み合わせてグループ化したい場合は、集計フレームワーク(Aggregation Framework)の $group 演算子を使用します。この記事では、実際にコレクションを作成し、$group を使って「Name」と「Age」の2つのフィールドでグループ化する手順を解説します。
サンプルコレクションの作成
まずは、ドキュメントを含むコレクションを作成しましょう。以下のように insertOne() メソッドを使ってデータを挿入します。
> db.demo192.insertOne({"Name":"Chris","Age":22});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3adb9f03d395bdc21346cd")
}
> db.demo192.insertOne({"Name":"David","Age":21});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3adba103d395bdc21346ce")
}
> db.demo192.insertOne({"Name":"Chris","Age":22});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3adba503d395bdc21346cf")
}
> db.demo192.insertOne({"Name":"Mike","Age":24});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3adbbf03d395bdc21346d0")
}
ここでは、「Chris(22歳)」のデータが2件存在することに注目してください。後ほど、この重複データがグループ化によって1つにまとまることを確認できます。
登録したドキュメントの確認
find() メソッドを使用すると、コレクション内のすべてのドキュメントを表示できます。
> db.demo192.find();
上記のクエリを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e3adb9f03d395bdc21346cd"), "Name" : "Chris", "Age" : 22 }
{ "_id" : ObjectId("5e3adba103d395bdc21346ce"), "Name" : "David", "Age" : 21 }
{ "_id" : ObjectId("5e3adba503d395bdc21346cf"), "Name" : "Chris", "Age" : 22 }
{ "_id" : ObjectId("5e3adbbf03d395bdc21346d0"), "Name" : "Mike", "Age" : 24 }
$groupを使った複数フィールドのグループ化
それでは、集計フレームワークの $group を使用して、複数のフィールドをグループ化するクエリを見ていきましょう。_id フィールドに対して、オブジェクト形式で複数のフィールド(ここでは Age と Name)を指定するのがポイントです。
> db.demo192.aggregate([{$group:{_id:{Age:"$Age",Name:"$Name"}}}]);
このクエリを実行すると、以下の出力が得られます。
{ "_id" : { "Age" : 24, "Name" : "Mike" } }
{ "_id" : { "Age" : 21, "Name" : "David" } }
{ "_id" : { "Age" : 22, "Name" : "Chris" } }
実行結果のポイント
出力結果を見ると、元々4件あったドキュメントが3件にまとまっていることがわかります。これは、「Chris」かつ「Age: 22」の組み合わせが同一であるため、同じグループとして扱われた結果です。
このように $group の _id に複数のフィールドをオブジェクトとして指定することで、SQLにおける GROUP BY Age, Name と同様の処理をMongoDBで実現できます。さらに $sum や $count などのアキュムレータ演算子を組み合わせれば、各グループの件数や合計値を取得することも可能です。
-
MongoDBで_idを使ってグループ化するクエリの書き方
MongoDBでドキュメントをグループ化するには、集計パイプライン(aggregation pipeline)の $group ステージを使用します。この記事では、実際にコレクションを作成し、$group を使ってデータを集計する手順を具体的な例とともに解説します。 サンプルコレクションの作成 まずは、動作確認用のコレクションにドキュメントを挿入してみましょう。以下のように insertOne() メソッドを使って、スコア情報を持つドキュメントを複数件登録します。 > db.demo529.insertOne({Score:10}); { acknowledged : true
-
MongoDBの集計フレームワークで特定のフィールド値に一致するドキュメントを取得する方法
MongoDBで特定のフィールド値に一致するドキュメントを抽出したい場合は、集計フレームワーク(Aggregation Framework)の $match ステージを使用します。この記事では、実際にコレクションを作成しながら、$match を使った条件一致と、$group を組み合わせた件数集計の手順を解説します。1. サンプルコレクションの作成まず、insertOne() メソッドを使って、複数のドキュメントを含むコレクションを作成します。> db.demo555.insertOne({CountryName:US});{ acknowledged : true, inser