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

MongoDBの集計(aggregate)クエリで$matchは使える?基本の使い方を実例付きで解説

はい、$matchはMongoDBの集計(aggregate)パイプラインで問題なく使用できます。$matchステージは、指定した条件に一致するドキュメントだけを後続のパイプラインに渡すフィルタとして機能します。find()メソッドと同じような役割を果たしますが、$countや$groupなど他のステージと組み合わせられる点が大きな特徴です。

サンプルコレクションの作成

まず、ドキュメントを含むコレクションを作成してみましょう。

> db.demo358.insertOne({"ClientId":101,"ClientName":"Chris","ClientAge":34});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e5692c0f8647eb59e5620cb")
}
> db.demo358.insertOne({"ClientId":102,"ClientName":"David","ClientAge":32});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e5692caf8647eb59e5620cc")
}
> db.demo358.insertOne({"ClientId":103,"ClientName":"David","ClientAge":35});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e5692d2f8647eb59e5620cd")
}
> db.demo358.insertOne({"ClientId":104,"ClientName":"Bob","ClientAge":31});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e5692ddf8647eb59e5620ce")
}
> db.demo358.insertOne({"ClientId":105,"ClientName":"Chris","ClientAge":36});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e5692e7f8647eb59e5620cf")
}

上記のコマンドでは、ClientNameに「Chris」「David」「Bob」を持つ5件のドキュメントを挿入しています。

登録済みドキュメントの確認

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

> db.demo358.find();

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

{ "_id" : ObjectId("5e5692c0f8647eb59e5620cb"), "ClientId" : 101, "ClientName" : "Chris", "ClientAge" : 34 }
{ "_id" : ObjectId("5e5692caf8647eb59e5620cc"), "ClientId" : 102, "ClientName" : "David", "ClientAge" : 32 }
{ "_id" : ObjectId("5e5692d2f8647eb59e5620cd"), "ClientId" : 103, "ClientName" : "David", "ClientAge" : 35 }
{ "_id" : ObjectId("5e5692ddf8647eb59e5620ce"), "ClientId" : 104, "ClientName" : "Bob", "ClientAge" : 31 }
{ "_id" : ObjectId("5e5692e7f8647eb59e5620cf"), "ClientId" : 105, "ClientName" : "Chris", "ClientAge" : 36 }

aggregateでの$matchの使い方

それでは、集計パイプライン内で$matchを使う方法を見ていきましょう。ここでは、ClientNameが「David」と一致するドキュメントを抽出し、さらに$countステージでその件数をカウントしています。

> db.demo358.aggregate(
...    [ { $match : { "ClientName" : "David" }},
...    { "$count": "ClientName" }
... ]
... );

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

{ "ClientName" : 2 }

結果の解説

出力「{ "ClientName" : 2 }」は、ClientNameが「David」であるドキュメントが2件存在することを示しています。このように、$matchで条件に合うドキュメントを絞り込み、$countなどの後続ステージへ渡すことで、柔軟なデータ集計が可能になります。


  1. MongoDBで大文字と小文字を区別せずに検索する方法($regexの使い方)

    MongoDBで大文字と小文字を区別しない(ケースインセンシティブな)検索を実行したい場合は、find()メソッドの中で正規表現($regex)を使用します。基本となる構文は以下の通りです。db.demo572.find({yourFieldName : { $regex : /^yourValue$/i}});正規表現のポイントこの構文で重要なのは、パターンの末尾に付ける「i」オプションです。このフラグを指定することで、マッチング時に大文字と小文字の違いが無視されます。また、^(先頭)と$(末尾)で値を囲むことで、部分一致ではなく完全一致の検索になります。それでは、実際にサンプルコレクション

  2. MongoDBの集計パイプラインで複数フィールドをカウントする方法($facet活用)

    MongoDBで複数のフィールドごとにドキュメントをカウントしたい場合、$facet演算子を使うのが効果的です。$facetは、同じ入力ドキュメント群に対して、単一のステージ内で複数の集計パイプラインを同時に処理できる強力な機能です。この記事では、実際にコレクションを作成し、$facetを組み合わせた集計クエリで複数フィールドの値をカウントする手順を解説します。1. サンプルコレクションの作成まず、insertOne()メソッドを使ってサンプルドキュメントを挿入します。各ドキュメントにはdetails1・details2・details3という3つのネストされたフィールドを持たせます。>