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

MongoDBのfind()クエリでネストされたドキュメントを取得する方法

MongoDBでネストされたドキュメント(入れ子になったサブドキュメントや配列内のオブジェクト)から値を取得するには、「ドット表記(dot notation)」を使用します。この記事では、サンプルコレクションを作成し、find()クエリを使ってネストされたデータを検索する具体的な手順を解説します。

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

まず、insert()メソッドを使ってドキュメントを含むコレクションを作成しましょう。

> db.demo591.insert([
...    { "Name": "John", "Age": 23 },
...    {"Name": "Carol", "Age": 26},
...    { "Name": "Robert", "Age": 29,
...    details:[
...       {
...          Email:"Robert@gmail.com",CountryName:"US"},{"Post":35}
...       ]}
... ]);
BulkWriteResult({
    "writeErrors" : [ ],
    "writeConcernErrors" : [ ],
    "nInserted" : 3,
    "nUpserted" : 0,
    "nMatched" : 0,
    "nModified" : 0,
    "nRemoved" : 0,
    "upserted" : [ ]
})

3件のドキュメントが正常に挿入されました(nInserted: 3)。このうち「Robert」のドキュメントには、EmailやCountryNameを含む「details」という配列フィールドがネストされているのがわかります。

find()メソッドですべてのドキュメントを表示する

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

> db.demo591.find();

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

{ "_id" : ObjectId("5e92dd08fd2d90c177b5bcd3"), "Name" : "John", "Age" : 23 }
{ "_id" : ObjectId("5e92dd08fd2d90c177b5bcd4"), "Name" : "Carol", "Age" : 26 }
{ "_id" : ObjectId("5e92dd08fd2d90c177b5bcd5"), "Name" : "Robert", "Age" : 29, "details" : [ {
"Email" : "Robert@gmail.com", "CountryName" : "US" }, { "Post" : 35 } ] }

ドット表記でネストされたドキュメントを検索する

続いて、ドット表記を使ってネストされたドキュメントを取得するクエリを見てみましょう。「details.Email」のように、親フィールドと子フィールドをピリオド(.)でつなぐことで、配列内のオブジェクトが持つフィールドを検索条件に指定できます。

> db.demo591.find({"details.Email": "Robert@gmail.com"});

実行結果は以下の通りです。Emailが「Robert@gmail.com」に一致するドキュメントのみが抽出されています。

{ "_id" : ObjectId("5e92dd08fd2d90c177b5bcd5"), "Name" : "Robert", "Age" : 29, "details" : [
   { "Email" : "Robert@gmail.com", "CountryName" : "US" }, { "Post" : 35 } 
] }

まとめ

MongoDBでネストされたフィールドを検索する際のポイントは以下の通りです。

  • クエリ内のドット表記のフィールド名(例:「details.Email」)は、必ずダブルクォーテーションで囲みます。
  • ドット表記はサブドキュメントだけでなく、配列内のオブジェクトに対しても使用できます。
  • 条件に一致する要素が配列内のどこかに1つでも存在すれば、そのドキュメント全体が結果として返されます。
  1. MongoDBでネストされたドキュメントを更新する方法|位置演算子$を使った配列要素の更新手順

    MongoDBでは、ドキュメント内の配列に格納されたネストされた(入れ子の)ドキュメントも、位置演算子「$」を使うことで効率的に更新できます。この記事では、実際のコード例を通じて、配列内の特定のサブドキュメントを更新する手順をわかりやすく解説します。 1. サンプルコレクションの作成 まず、insertOne()メソッドを使用して、ネストされたドキュメントを含むコレクションを作成します。ここでは「Information」というフィールドに、複数のサブドキュメントを持つ配列を格納しています。 > db.demo595.insertOne( { Information: [ { _i

  2. 【MongoDB】ネストされた(入れ子構造の)ドキュメントを更新するクエリの書き方

    MongoDBでは、入れ子(ネスト)になったサブドキュメントのフィールドを更新する際、update()メソッドとドット表記(dot notation)を組み合わせて使用します。ドット表記を使うことで、深い階層にあるフィールドを直接指定して値を変更できます。1. サンプルコレクションの作成まず、ネストされたドキュメントを含むコレクションを作成しましょう。以下のコマンドでdemo607というコレクションにドキュメントを挿入します。> db.demo607.insertOne( ... { ... id: 1, ... Info1 : { ...