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

MongoDBでネストされた配列から特定の要素を抽出する方法

ドット表記を使ったネストされた配列からの要素抽出

MongoDBでは、ドット(.)表記を利用することで、深くネストされた配列の中から特定の要素を抽出できます。本記事では、実際にコレクションを作成しながら、その手順を順番に見ていきましょう。

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

まず、insertOne()メソッドを使って、ネストされた構造を持つドキュメントを含むコレクションを作成します。

> db.extractParticularElementDemo.insertOne(
...     {
...        "_id" : 101,
...        "StudentName" : "John",
...        "StudentInformation" : [
...           {
...              "Age" : 21,
...              "StudentPersonalInformation" : [
...                 {
...                    "StudentNickName" : "Mike",
...                    "StudentFamilyDetails" : [
...                       {
...                          "FatherName" : "Carol"
...                       }
...                    ]
...                 },
...                 {
...                    "StudentAnotherName" : "David",
...                    "StudentFamilyDetails" : [
...                       {
...                          "FatherName" : "Robert"
...                       }
...                    ]
...                 }
...              ]
...           }
...        ]
...     }
... );
{ "acknowledged" : true, "insertedId" : 101 }

このドキュメントは、「StudentInformation」→「StudentPersonalInformation」→「StudentFamilyDetails」というように、配列とオブジェクトが多層的にネストした構造になっています。

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

find()メソッドとpretty()を組み合わせると、コレクション内のすべてのドキュメントを見やすい形式で表示できます。

> db.extractParticularElementDemo.find().pretty();

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

{
    "_id" : 101,
    "StudentName" : "John",
    "StudentInformation" : [
       {
          "Age" : 21,
          "StudentPersonalInformation" : [
             {
                "StudentNickName" : "Mike",
                "StudentFamilyDetails" : [
                   {
                      "FatherName" : "Carol"
                   }
                ]
             },
             {
                "StudentAnotherName" : "David",
                "StudentFamilyDetails" : [
                   {
                      "FatherName" : "Robert"
                   }
                ]
             }
          ]
       }
    ]
 }

特定の要素だけを抽出するクエリ

それでは、ネストされた配列から特定の要素を抽出してみましょう。以下のクエリでは、検索条件(クエリ)とプロジェクション(射影)の両方にドット表記を使用しています。

  • 第1引数(検索条件):「FatherName」が「Carol」であるドキュメントに絞り込みます。
  • 第2引数(プロジェクション):該当フィールドのみを表示対象とし、「_id」フィールドは0を指定して非表示にします。
> db.extractParticularElementDemo.find(
... {'StudentInformation.StudentPersonalInformation.StudentFamilyDetails.FatherName':'Carol'},
... {'StudentInformation.StudentPersonalInformation.StudentFamilyDetails.FatherName':1,"_id":0}
... ).pretty();

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

{
    "StudentInformation" : [
       {
          "StudentPersonalInformation" : [
             {
                "StudentFamilyDetails" : [
                   {
                      "FatherName" : "Carol"
                   }
                ]
             },
             {
                "StudentFamilyDetails" : [
                   {
                      "FatherName" : "Robert"
                   }
                ]
             }
          ]
       }
    ]
 }

ポイント解説

この結果から分かるように、ドット表記でパスを指定することで、ネストされた階層をまたいだ検索やフィールドの取得が可能になります。ただし、標準的なプロジェクションでは、一致した親配列全体が返される点に注意が必要です。条件に合致する要素だけを正確に取り出したい場合は、集計フレームワーク(Aggregation Pipeline)の $filter や $map を使う方法も有効です。用途に応じて使い分けるとよいでしょう。

  1. MongoDBの配列から要素を削除する方法:$pull演算子の使い方

    MongoDBでドキュメント内の配列から特定の要素を削除したい場合は、更新演算子の $pull を使用します。この記事では、実際のコード例を使いながら、$pullによる配列要素の削除手順をわかりやすく解説します。1. サンプルコレクションの作成まず、insertOne() メソッドを使って、数値の配列を持つドキュメントを含むコレクションを作成します。> db.demo279.insertOne({id:[101,103,105,110]}); { acknowledged : true, insertedId : ObjectId(5e490af7dd099650a5401a

  2. MongoDBでサブプロパティ(ネストされた配列)から要素を削除する方法 – $pull演算子の使い方

    MongoDBでは、$pull 演算子を使うことで、ドキュメント内のサブプロパティ(ネストされたフィールド)に格納された配列から、条件に一致する要素を削除できます。この記事では、実際のコード例をもとに、手順をわかりやすく解説します。 1. コレクションとドキュメントの作成 まず、insertOne() メソッドを使って、サンプル用のドキュメントを作成します。ここでは userDetails オブジェクトの中に、isMarried フィールドと userInfo 配列がネストされた構造を用意しました。 > db.demo388.insertOne( ... { ...