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

MongoDBのfind()メソッドでネストされたキー(フィールド)を検索する方法

MongoDBのfind()メソッドでネストされたキー(ドキュメント内の入れ子になったフィールド)を検索するには、ドット(.)記法を使用します。

基本構文

ネストされたキーを検索する際の基本的な構文は以下のとおりです。

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

外側のフィールド名と内側のフィールド名をドットでつなぎ、検索したい値を指定することで、入れ子構造のデータも簡単に絞り込むことができます。

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

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

> db.searchForNestedKeysDemo.insertOne({"ClientName":"Larry","ClientAge":28,"ClientExtraDetails":{"isEducated":true,"CountryName":"US"}});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5ca20e8b66324ffac2a7dc64")
}
> db.searchForNestedKeysDemo.insertOne({"ClientName":"Chris","ClientAge":29,"ClientExtraDetails":{"isEducated":false,"CountryName":"UK"}});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5ca20ea366324ffac2a7dc65")
}
> db.searchForNestedKeysDemo.insertOne({"ClientName":"David","ClientAge":39,"ClientExtraDetails":{"isEducated":true,"CountryName":"AUS"}});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5ca20eba66324ffac2a7dc66")
}

この例では、クライアントの名前や年齢に加えて、「ClientExtraDetails」というネストされたオブジェクトの中に「isEducated」(学歴の有無)や「CountryName」(国名)といったフィールドを持つドキュメントを3件登録しています。

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

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

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

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

{
    "_id" : ObjectId("5ca20e8b66324ffac2a7dc64"),
    "ClientName" : "Larry",
    "ClientAge" : 28,
    "ClientExtraDetails" : {
        "isEducated" : true,
        "CountryName" : "US"
    }
}
{
    "_id" : ObjectId("5ca20ea366324ffac2a7dc65"),
    "ClientName" : "Chris",
    "ClientAge" : 29,
    "ClientExtraDetails" : {
        "isEducated" : false,
        "CountryName" : "UK"
    }
}
{
    "_id" : ObjectId("5ca20eba66324ffac2a7dc66"),
    "ClientName" : "David",
    "ClientAge" : 39,
    "ClientExtraDetails" : {
        "isEducated" : true,
        "CountryName" : "AUS"
    }
}

ネストされたキーを指定した検索クエリ

それでは、実際にネストされたキーを条件として検索を行います。ここでは、「ClientExtraDetails」内の「CountryName」が「UK」であるドキュメントを抽出します。

> db.searchForNestedKeysDemo.find({"ClientExtraDetails.CountryName":"UK"}).pretty();

実行結果は以下のとおりです。

{
    "_id" : ObjectId("5ca20ea366324ffac2a7dc65"),
    "ClientName" : "Chris",
    "ClientAge" : 29,
    "ClientExtraDetails" : {
        "isEducated" : false,
        "CountryName" : "UK"
    }
}

まとめ

MongoDBでネストされたフィールドを検索する場合は、「外側のフィールド名.内側のフィールド名」という形式のドット記法を使うのがポイントです。この記法をマスターすれば、階層構造を持つドキュメントでも柔軟かつ正確にデータを取得できるようになります。

  1. MongoDBでネストされた配列にフィルタリング条件を設定する方法($filterと$condの使い方)

    MongoDBでネストされた配列にフィルタリング条件を設定するにはMongoDBのaggregate()内で$filterと$condを使用すると、配列に対して柔軟なフィルタリング条件を設定できます。$filterは、指定した条件に基づいて配列の部分集合(条件を満たす要素のみ)を返却する演算子です。さらに、内部で$mapや$anyElementTrue、$indexOfBytesなどを組み合わせることで、ネストされた配列の中から特定の値を持つ要素だけを抽出できます。この記事では、「Messages」というネストされた配列の中から、特定の文字列(Hello)を含むドキュメントだけを絞り込む方法を

  2. MongoDBの$regex演算子で大文字と小文字を区別しない検索を行う方法(iオプション)

    MongoDBで大文字と小文字を区別せずに文字列検索を行いたい場合は、$regex演算子に「i」(case insensitive:大文字と小文字を区別しない)オプションを指定します。この記事では、実際にコレクションを作成し、「mongodb」という文字列を表記の違いにかかわらずすべて取得する方法を、サンプルコード付きで解説します。ドキュメントを含むコレクションの作成まず、insertOne()メソッドを使って、異なる表記(MySQL、MongoDB、mongodb、MONGODB)のドキュメントを持つコレクションを作成しましょう。> db.demo759.insertOne({Subj