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

MongoDBの集約(Aggregation)で特定のフィールド値を持つドキュメントを取得する方法

特定の条件に一致するドキュメントを取得したい場合には、aggregate() メソッドを使用します。ここでは、フィールド「Age」の値が「21」であるドキュメントを取得するケースを例に解説します。

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

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

> db.demo685.insertOne(
...     {
...        "details":
...        [
...           {
...              Name:"Chris",
...              Age:21
...           },
...           {
...              Name:"David",
...              Age:23
...           },
...           {
...              Name:"Bob",
...              Age:21
...           }
...        ]
...     }
... );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5ea54f6fa7e81adc6a0b395b")
}

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

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

> db.demo685.find();

このクエリを実行すると、次のような出力が得られます。

{ "_id" : ObjectId("5ea54f6fa7e81adc6a0b395b"), "details" : [
    { "Name" : "Chris", "Age" : 21 },
    { "Name" : "David", "Age" : 23 },
    { "Name" : "Bob", "Age" : 21 } 
] }

集約パイプラインによる特定フィールド値の抽出

続いて、MongoDBの集約(アグリゲーション)フレームワークを使ったクエリを見ていきましょう。以下の例では、$unwind で配列を展開し、$match で条件に一致する要素だけを絞り込み、$project で不要なフィールドを除外しています。

> db.demo685.aggregate([ { $unwind: "$details" }, { $match: { "details.Age": 21 } }, { $project: {_id: 0}} ]).pretty();

このクエリを実行すると、「Age」が「21」のドキュメントのみが出力されます。

{ "details" : { "Name" : "Chris", "Age" : 21 } }
{ "details" : { "Name" : "Bob", "Age" : 21 } }

各ステージの役割

  • $unwind: 配列型フィールド「details」を個別のドキュメントに展開します。
  • $match: 展開後のドキュメントから「details.Age」が 21 のものだけを抽出します。
  • $project: _id: 0 を指定することで、結果から _id フィールドを除外し、見やすい出力にします。

このように、aggregate() のパイプラインを組み合わせることで、ネストされた配列の中から特定のフィールド値を持つデータを柔軟に取得できます。

  1. MongoDBで特定の数値より大きいフィールド値を持つドキュメントを照合して取得する方法

    MongoDBでドキュメントを照合(マッチング)するには、集計パイプライン(aggregate)内で $match を使用します。さらに、特定の数値より大きい値を条件にしたい場合は、比較演算子の $gt(greater than)を組み合わせます。この記事では、実際にコレクションを作成し、$sort や $limit と組み合わせながら、条件に一致するドキュメントを取得する手順を解説します。1. サンプルコレクションの作成まずは insertOne() メソッドを使って、ドキュメントを含むコレクションを作成しましょう。> db.demo730.insertOne({Name : Chri

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

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