MongoDBでドキュメント内の配列をGROUP BYし、重複する年齢値の出現回数を取得する方法
MongoDBの$group演算子で配列要素をグループ化する
MongoDBでドキュメント内の配列をGROUP BY(グループ化)するには、集計パイプライン(aggregation pipeline)の $group 演算子を使用します。配列を個々のドキュメントに展開するために、$unwind と組み合わせるのが一般的な手法です。
ここでは、各人物の名前と年齢を含む「details」配列を持つコレクションを作成し、同じ年齢が何回出現するかをカウントする例を見ていきましょう。
1. コレクションの作成
まず、insertOne() メソッドを使ってサンプルドキュメントを挿入します。
> db.demo559.insertOne({details:[{Name:"Chris",Age:21},{Name:"Bob",Age:22},{Name:"Carol",Age:21},{Name:"Sam",Age:21}]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e8f38d954b4472ed3e8e866")
}2. ドキュメントの確認
find() メソッドを使って、コレクション内のすべてのドキュメントを表示します。
> db.demo559.find().pretty();
上記のクエリを実行すると、次のような出力が得られます。
{
"_id" : ObjectId("5e8f38d954b4472ed3e8e866"),
"details" : [
{
"Name" : "Chris",
"Age" : 21
},
{
"Name" : "Bob",
"Age" : 22
},
{
"Name" : "Carol",
"Age" : 21
},
{
"Name" : "Sam",
"Age" : 21
}
]
}3. 配列をGROUP BYする集計クエリ
次に、ドキュメント内の配列をグループ化するための集計クエリを実行します。処理の流れは以下の通りです。
- $unwind: 「details」配列を展開し、各要素を個別のドキュメントとして扱えるようにします。
- $group: 展開されたドキュメントを「Age」フィールドの値でグループ化し、
$sum: 1によって各年齢の出現回数をカウントします。 - $sort: 結果を「_id」(年齢)の昇順に並べ替えます。
> db.demo559.aggregate([
... {
... "$unwind": "$details"
... },
... {
... "$group": {
... "_id": "$details.Age",
... "Count": { "$sum" : 1 }
... }
... },
... { "$sort": { "_id" : 1 } }
... ])4. 実行結果
この集計パイプラインを実行すると、以下のような出力が得られます。
{ "_id" : 21, "Count" : 3 }
{ "_id" : 22, "Count" : 1 }結果からわかるように、年齢「21」は3回(Chris、Carol、Sam)、年齢「22」は1回(Bob)出現しています。このように $unwind と $group を組み合わせることで、ネストされた配列内の値を簡単に集計できます。このテクニックは、タグの頻度分析やカテゴリ別の件数集計など、さまざまなユースケースに応用可能です。
-
MySQLで列の重複値の出現回数を集計・並べ替える方法
MySQLでは、GROUP BYとORDER BY DESCを組み合わせることで、列に含まれる重複値(繰り返し値)ごとの出現回数を簡単に集計できます。この記事では、実際にテーブルを作成しながら、その手順をわかりやすく解説します。 1. サンプルテーブルの作成 まずは、投稿メッセージを格納するサンプルテーブルを作成しましょう。以下のようにCREATE TABLE文を実行します。 mysql> create table DemoTable -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, ->
-
C#のGetEnumValues()メソッドで列挙型の定数値の配列を取得する方法
C#では、Type.GetEnumValues()メソッドを使用することで、現在の列挙型(enum)に含まれる定数の値の配列を取得できます。この記事では、実際のコード例を通じて、その使い方と動作をわかりやすく解説します。 GetEnumValues()メソッドとは GetEnumValues()は、指定した型が列挙型である場合に、その定数値を格納した配列(Array)を返すメソッドです。ただし、対象の型が列挙型ではない場合にはArgumentException例外がスローされるため、注意が必要です。 例1:列挙型以外の型を指定した場合 まず、列挙型ではないint型に対してこのメソッドを呼び