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

MongoDBの集計フレームワークで特定のフィールド値に一致するドキュメントを取得する方法

MongoDBで特定のフィールド値に一致するドキュメントを抽出したい場合は、集計フレームワーク(Aggregation Framework)の $match ステージを使用します。この記事では、実際にコレクションを作成しながら、$match を使った条件一致と、$group を組み合わせた件数集計の手順を解説します。

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

まず、insertOne() メソッドを使って、複数のドキュメントを含むコレクションを作成します。

> db.demo555.insertOne({"CountryName":"US"});{
    "acknowledged" : true, "insertedId" : ObjectId("5e8f21bf54b4472ed3e8e85f")
}
> db.demo555.insertOne({"CountryName":"UK"});{
    "acknowledged" : true, "insertedId" : ObjectId("5e8f21c254b4472ed3e8e860")
}
> db.demo555.insertOne({"CountryName":"US"});{
    "acknowledged" : true, "insertedId" : ObjectId("5e8f21c354b4472ed3e8e861")
}
> db.demo555.insertOne({"CountryName":"AUS"});{
    "acknowledged" : true, "insertedId" : ObjectId("5e8f21c554b4472ed3e8e862")
}
> db.demo555.insertOne({"CountryName":"US"});{
    "acknowledged" : true, "insertedId" : ObjectId("5e8f21c754b4472ed3e8e863")
}

ここでは「US」が3件、「UK」と「AUS」がそれぞれ1件登録されています。

2. 登録したドキュメントの確認

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

> db.demo555.find();

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

{ "_id" : ObjectId("5e8f21bf54b4472ed3e8e85f"), "CountryName" : "US" }
{ "_id" : ObjectId("5e8f21c254b4472ed3e8e860"), "CountryName" : "UK" }
{ "_id" : ObjectId("5e8f21c354b4472ed3e8e861"), "CountryName" : "US" }
{ "_id" : ObjectId("5e8f21c554b4472ed3e8e862"), "CountryName" : "AUS" }
{ "_id" : ObjectId("5e8f21c754b4472ed3e8e863"), "CountryName" : "US" }

3. $matchで特定のフィールド値に一致させる

以下は、$match を使って「CountryName」が「US」であるドキュメントだけを抽出し、さらに $group でその件数をカウントするクエリの例です。

> db.demo555.aggregate([
...     {$match: {CountryName: 'US'}},
...     {$group: {_id: null, Total: {$sum: 1}}}
... ])

このクエリのポイントは次のとおりです。

  • $match: 指定した条件(ここでは CountryName が 'US')に一致するドキュメントのみをパイプラインの次のステージへ渡します。SQLの WHERE 句に相当します。
  • $group: _id: null を指定することで全ドキュメントをひとつのグループにまとめ、$sum: 1 によって一致した件数を合計しています。

実行結果は以下のとおりです。「US」に一致するドキュメントが3件あることがわかります。

{ "_id" : null, "Total" : 3 }

まとめ

集計フレームワークでは、$match をパイプラインの先頭に置くことでインデックスを活用でき、パフォーマンスの向上も期待できます。条件による絞り込みを行い、その後 $group$sort などのステージと組み合わせることで、柔軟なデータ集計が可能になります。

  1. 【MongoDB】idがドキュメント内の配列フィールドの値と一致する場合に除外するクエリの書き方

    MongoDBでは、ドキュメントの id フィールドの値が、同一ドキュメント内の配列型フィールド(例: subjectid)に含まれている場合に、そのドキュメントを検索結果から除外したいケースがあります。このような条件を実現するには、 $expr 演算子と組み合わせて $not および $in を使用します。本記事では、サンプルコレクションの作成からクエリの実行、出力結果の確認までを順を追って解説します。 サンプルコレクションの作成 まずは、動作確認用のドキュメントを含むコレクションを作成します。ここでは、 id フィールドと、文字列の配列を持つ subjectid フィールドを備えた2件のド

  2. MongoDBで配列をクエリして特定の値を取得する方法

    配列から特定の値を取得するには、aggregate()メソッドと$projectステージを組み合わせて使用します。まずは、ドキュメントを含むコレクションを作成してみましょう。 > db.demo761.insertOne( ...    { ...        "details": [ ...            { ...                "