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

MongoDBでネストされたJSON配列から値を取得する方法

MongoDBでは、ドット記法(dot notation)を使うことで、ネストされたJSON配列の中から特定の値を持つドキュメントを簡単に検索できます。この記事では、実際のコード例を通じて、ネストされた配列フィールドへのクエリの書き方を解説します。

基本構文

ネストされたJSON配列から値を取得するには、以下のような構文を使用します。外側のフィールド名から順に、ドット(.)でつなげて目的のフィールドまでパスを指定します。

db.yourCollectionName.find({"yourOuterFieldName.yourInnerFieldName.yourNextInnerFieldName...N": "yourValue"}).pretty();

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

まず、ネストされたJSON配列を含むドキュメントを持つコレクションを作成しましょう。ここでは「nestedJSONArrayDemo」というコレクションに、顧客情報を格納した2件のドキュメントを挿入します。

> db.nestedJSONArrayDemo.insertOne({
...     "ClientDetails" :
...     {
...         "ClientPersonalDetails" : [
...             { "CountryName" : "US" },
...             { "CountryName" : "AUS"},
...             { "ClientName":"Chris" },
...             { "ClientName":"David" }
...         ]
...     }
... });
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cd2cbb2b64f4b851c3a13bc")
}
> db.nestedJSONArrayDemo.insertOne({
...     "ClientDetails" :
...     {
...         "ClientPersonalDetails" : [
...             { "CountryName" : "Belgium" },
...             { "CountryName" : "Canada"},
...             { "CountryName" : "Egypt"}
...         ]
...     }
... });
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cd2cc14b64f4b851c3a13bd")
}

上記の例では、「ClientDetails」というオブジェクトの中に「ClientPersonalDetails」という配列があり、その中にさらにオブジェクトが格納された、3階層のネスト構造になっています。

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

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

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

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

{
    "_id" : ObjectId("5cd2cbb2b64f4b851c3a13bc"),
    "ClientDetails" : {
        "ClientPersonalDetails" : [
            {
                "CountryName" : "US"
            },
            {
                "CountryName" : "AUS"
            },
            {
                "ClientName" : "Chris"
            },
            {
                "ClientName" : "David"
            }
        ]
    }
}
{
    "_id" : ObjectId("5cd2cc14b64f4b851c3a13bd"),
    "ClientDetails" : {
        "ClientPersonalDetails" : [
            {
                "CountryName" : "Belgium"
            },
            {
                "CountryName" : "Canada"
            },
            {
                "CountryName" : "Egypt"
            }
        ]
    }
}

ネストされた配列から値を検索する

それでは、ネストされたJSON配列から値を取得するクエリを実行します。ここでは「CountryName」が「Canada」であるドキュメントを検索します。ポイントは、「親フィールド.子フィールド.孫フィールド」のようにドットでパスをつなぐことです。

> db.nestedJSONArrayDemo.find({"ClientDetails.ClientPersonalDetails.CountryName": "Canada"}).pretty();

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

{
    "_id" : ObjectId("5cd2cc14b64f4b851c3a13bd"),
    "ClientDetails" : {
        "ClientPersonalDetails" : [
            {
                "CountryName" : "Belgium"
            },
            {
                "CountryName" : "Canada"
            },
            {
                "CountryName" : "Egypt"
            }
        ]
    }
}

まとめ

MongoDBでネストされたJSON配列内の値を検索する場合、配列のインデックスを意識せずとも、ドット記法で「フィールドパス」を指定するだけで自動的に配列内の全要素が走査されます。条件に一致する要素が配列内のどこかに存在すれば、そのドキュメント全体が結果として返されます。この仕組みを理解しておくと、深くネストされたドキュメント構造でも柔軟にデータを抽出できるようになります。

  1. MongoDBのコレクションからデータを取得する方法(findOne()の使い方)

    MongoDBのコレクションからデータを取得するには?MongoDBでコレクションから単一のドキュメントを取得したい場合は、findOne()メソッドを使用します。本記事では、サンプルコレクションを作成し、その中から特定の条件に一致するデータを取り出すまでの手順を順番に解説します。1. サンプルコレクションの作成まず、insertOne()メソッドを使って、学生情報のドキュメントを複数件持つコレクション「demo463」を作成します。> db.demo463.insertOne({StudentName:Chris Brown,StudentAge:21,StudentCountryNa

  2. MongoDBでネストされた配列をソートする方法:$unwindと$sortを活用したクエリ

    MongoDBでドキュメント内に格納されたネストされた配列(サブドキュメントの配列)をソートしたい場合、集計パイプライン(aggregate)を使い、$unwindで配列を展開した後に$sortで並べ替え、最後に$groupで再構成するのが定番のアプローチです。この記事では、実際にコレクションを作成しながら、ネストされた配列をスコア順にソートする手順を解説します。1. サンプルコレクションの作成まず、ネストされた配列「details」を持つドキュメントを挿入してコレクションを作成します。> db.demo505.insertOne( ... { ... details: [ ..