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

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 を組み合わせることで、ネストされた配列内の値を簡単に集計できます。このテクニックは、タグの頻度分析やカテゴリ別の件数集計など、さまざまなユースケースに応用可能です。

  1. MySQLで列の重複値の出現回数を集計・並べ替える方法

    MySQLでは、GROUP BYとORDER BY DESCを組み合わせることで、列に含まれる重複値(繰り返し値)ごとの出現回数を簡単に集計できます。この記事では、実際にテーブルを作成しながら、その手順をわかりやすく解説します。 1. サンプルテーブルの作成 まずは、投稿メッセージを格納するサンプルテーブルを作成しましょう。以下のようにCREATE TABLE文を実行します。 mysql> create table DemoTable -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, ->

  2. C#のGetEnumValues()メソッドで列挙型の定数値の配列を取得する方法

    C#では、Type.GetEnumValues()メソッドを使用することで、現在の列挙型(enum)に含まれる定数の値の配列を取得できます。この記事では、実際のコード例を通じて、その使い方と動作をわかりやすく解説します。 GetEnumValues()メソッドとは GetEnumValues()は、指定した型が列挙型である場合に、その定数値を格納した配列(Array)を返すメソッドです。ただし、対象の型が列挙型ではない場合にはArgumentException例外がスローされるため、注意が必要です。 例1:列挙型以外の型を指定した場合 まず、列挙型ではないint型に対してこのメソッドを呼び