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

【MongoDB】find()と位置演算子$で特定のサブドキュメントを選択する方法

MongoDBで配列内の特定のサブドキュメント(ネストされたドキュメント)を選択して取得するには、find()メソッドを使用します。本記事では、実際にコレクションを作成しながら、条件に一致するサブドキュメントだけを取り出す手順をわかりやすく解説します。

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

まず、insertOne()メソッドを使って、配列形式の「Details」フィールドを持つドキュメントをコレクションに登録しましょう。

> db.demo37.insertOne({"Details":[{"Name":"Chris","Age":21},{"Name":"David","Age":23}]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e176635cfb11e5c34d898d7")
}
> db.demo37.insertOne({"Details":[{"Name":"Sam","Age":23},{"Name":"Robert","Age":25}]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e17664acfb11e5c34d898d8")
}

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

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

> db.demo37.find();

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

{ "_id" : ObjectId("5e176635cfb11e5c34d898d7"), "Details" : [ { "Name" : "Chris", "Age" : 21 }, { "Name" : "David", "Age" : 23 } ] }
{ "_id" : ObjectId("5e17664acfb11e5c34d898d8"), "Details" : [ { "Name" : "Sam", "Age" : 23 }, { "Name" : "Robert", "Age" : 25 } ] }

3. 特定のサブドキュメントを選択するクエリ

条件に一致するサブドキュメントだけを取得するには、検索条件に「Details.Name」を指定し、射影(プロジェクション)で位置演算子「$」を使用します。

> db.demo37.find({'Details.Name' : 'Sam'},{_id: 0, 'Details.$.Name': 1});

このクエリを実行すると、「Name」が「Sam」であるサブドキュメントのみが出力されます。

{ "Details" : [ { "Name" : "Sam", "Age" : 23 } ] }

ポイント解説

射影部分の「Details.$」は、検索条件に一致した配列要素を指す位置演算子です。これにより、配列全体ではなく、条件に合致したサブドキュメントだけを効率的に取得できます。また、「_id: 0」を指定することで、デフォルトで表示される_idフィールドを出力結果から除外しています。配列内の特定要素を扱う際は、この組み合わせを覚えておくと便利です。

  1. MySQLで特定の行を選択する方法:FIND_IN_SET関数の使い方を実例付きで解説

    MySQLでカンマ区切りの値が格納された列から、特定の値を含む行だけを抽出したい場合があります。そのようなときに便利なのが FIND_IN_SET() 関数です。この記事では、実際にテーブルを作成しながら、FIND_IN_SET() を使って特定の行を選択する方法を順を追って解説します。 FIND_IN_SET() 関数とは FIND_IN_SET() は、第2引数に指定したカンマ区切りの文字列リストの中に、第1引数の値が含まれているかどうかを調べる関数です。値が見つかった場合はその位置(1から始まる番号)を返し、見つからない場合は 0 を返します。この特性を利用することで、WHERE句と組み

  2. MySQLで重複データをすべて抽出する方法【サブクエリを使った実例付き】

    MySQLのテーブルに同じ値を持つレコード(重複データ)が複数含まれている場合、それらをすべて抽出したい場面はよくあります。そんなときに便利なのがサブクエリと GROUP BY・HAVING 句を組み合わせた方法です。 この記事では、実際にサンプルテーブルを作成し、重複レコードをすべて取得するまでの手順を順番に解説します。 1. サンプルテーブルの作成 まず、以下のSQL文でテーブルを作成します。Id 列は自動採番(AUTO_INCREMENT)の主キー、Name 列には名前を保存します。 mysql> create table DemoTable-> (-> Id int