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

MongoDBで特定の値の出現回数(カウント)を取得する方法

MongoDBで特定の値のカウントを取得するには?

MongoDBで配列内の特定の値が出現する回数を数えたい場合は、aggregate()メソッドを使用します。この記事では、実際にコレクションを作成しながら、特定の値(例:「Robert」)が配列内に何回含まれているかを集計する手順を詳しく解説します。

1. コレクションへのドキュメントの挿入

まずはinsertOne()メソッドを使って、サンプルとなるコレクションを作成しましょう。

> db.demo210.insertOne(
...   {
...      details: [
...         {
...            ClientName: "Robert"
...         },
...         {
...            ClientName: "John Doe"
...         },
...         {
...            ClientName: "Robert"
...         },
...         {
...            ClientName: "Robert"
...         },
...         {
...            ClientName: "David Miller"
...         }
...      ]
...   }
...);
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e3d99ab03d395bdc21346f9")
}

このドキュメントには、「details」という配列フィールドの中に5つのクライアント名が格納されています。そのうち「Robert」は3回出現しています。

2. find()メソッドでドキュメントを確認

find()メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。

> db.demo210.find();

実行すると、次のような出力が得られます。

{ "_id" : ObjectId("5e3d99ab03d395bdc21346f9"), "details" : [ { "ClientName" : "Robert" }, { "ClientName" : "John Doe" }, { "ClientName" : "Robert" }, { "ClientName" : "Robert" }, { "ClientName" : "David Miller" } ] }

3. aggregate()で特定の値のカウントを取得

続いて、特定の値の出現回数を集計するためのクエリを見ていきましょう。

> db.demo210.aggregate([
...   { "$match" : { "details.ClientName" : "Robert" } },
...   { "$unwind" : "$details" },
...   { "$match" : { "details.ClientName" : "Robert" } },
...   { "$group" : { "_id" : "$_id", "Size" : { "$sum" : 1 } } },
...   { "$match" : { "Size" : { "$gte" : 2 } } }
...]);

このクエリを実行すると、以下の出力が得られます。

{ "_id" : ObjectId("5e3d99ab03d395bdc21346f9"), "Size" : 3 }

結果として「Size: 3」が返され、配列内に「Robert」が3回出現していることが確認できました。

クエリの仕組み:集計パイプラインの各ステージ解説

上記のaggregate()クエリは、複数のパイプラインステージを組み合わせて構成されています。それぞれの役割は次のとおりです。

  • $match(最初): 「details.ClientName」に「Robert」を含むドキュメントだけを抽出します。
  • $unwind: 配列フィールド「$details」を要素ごとに分解し、各要素を個別のドキュメントとして扱えるようにします。
  • $match(2回目): 分解後の各ドキュメントから、再度「Robert」に該当するものだけを絞り込みます。
  • $group + $sum: ドキュメントIDごとにグループ化し、合致した要素の数を「$sum: 1」によってカウントします。
  • $match($gte): カウントが2以上の結果のみを出力対象とします。条件を変更すれば、任意の回数以上出現する値だけを抽出することも可能です。

このようにaggregate()のパイプラインを活用すれば、配列内の特定の値の出現回数を柔軟かつ正確に集計できます。条件部分の値や閾値($gteの数値)を変えることで、さまざまな集計ニーズに応用できるので、ぜひ実際のプロジェクトでも試してみてください。

  1. MySQLで列内の特定の値の出現回数(カウント)を取得する方法

    MySQLでは、COUNT(*)関数とWHERE句を組み合わせることで、特定の列に含まれる指定した値の出現回数を簡単に取得できます。この記事では、サンプルテーブルを作成し、実際にクエリを実行しながら手順を解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成しましょう。 mysql> create table DemoTable ( Id int, Name varchar(100) ); Query OK, 0 rows affected (1.40 sec) Id(整数型)とName(可変長文字列型)の2つの列を持つ

  2. C#のBitArrayで特定位置のビット値を取得する方法

    C#のBitArrayクラスでは、Get()メソッドを使うことで、指定した位置(インデックス)にあるビットの値を簡単に取得できます。この記事では、実際のコード例を通じてその使い方を解説します。Get()メソッドとはBitArrayは、true/false(1/0)のビット値を格納するコレクションです。Get(int index)メソッドにインデックスを渡すと、その位置のビット値がbool型で返されます。インデックスは0から始まる点に注意してください。サンプルコード以下の例では、2つのBitArrayを作成し、それぞれの長さや要素の値を確認しています。using System; using Sy