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

MongoDBで辞書型(ネストされたドキュメント)を値で検索する方法|find()の使い方を解説

MongoDBでネストされた辞書型データを値で検索するには?

MongoDBでは、find() メソッドと「ドット記法(dot notation)」を組み合わせることで、辞書(連想配列)のようにネストされたフィールドの値を指定して検索できます。この記事では、サンプルデータを作成し、実際に値で検索を行う手順を解説します。

1. 検索用のコレクションを作成する

まず、insertOne() メソッドを使って、顧客情報がネストされたドキュメントを含むコレクションを作成します。

> db.findInDictionaryDemo.insertOne(
...     {
...         "_id":101,
...         "AllCustomerDetails":
...         {
...            "SomeCustomerDetail1":
...            {
...               "CustomerName1":"John Doe",
...               "CustomerName2":"John Smith"
...            },
...            "SomeCustomerDetail2":
...            {
...               "CustomerName1":"Carol Taylor",
...               "CustomerName2":"David Miller"
...            }
...         }
...     }
... );
{ "acknowledged" : true, "insertedId" : 101 }

> db.findInDictionaryDemo.insertOne(
...     {
...         "_id":102,
...         "AllCustomerDetails":
...         {
...            "SomeCustomerDetail1":
...            {
...               "CustomerName1":"Sam Wiliams",
...               "CustomerName2":"Bob Johnson"
...            },
...            "SomeCustomerDetail2":
...            {
...               "CustomerName1":"Chris Brown",
...               "CustomerName2":"Mike Wilson"
...            }
...         }
...     }
... );
{ "acknowledged" : true, "insertedId" : 102 }

上記の例では、各ドキュメントに「AllCustomerDetails」という親フィールドがあり、その中に「SomeCustomerDetail1」「SomeCustomerDetail2」という入れ子のオブジェクトが存在します。

2. 登録済みドキュメントを確認する

find() メソッドを実行すると、コレクション内のすべてのドキュメントを表示できます。

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

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

{
    "_id" : 101,
    "AllCustomerDetails" : {
        "SomeCustomerDetail1" : {
           "CustomerName1" : "John Doe",
           "CustomerName2" : "John Smith"
        },
        "SomeCustomerDetail2" : {
           "CustomerName1" : "Carol Taylor",
           "CustomerName2" : "David Miller"
        }
    }
}
{
    "_id" : 102,
    "AllCustomerDetails" : {
        "SomeCustomerDetail1" : {
           "CustomerName1" : "Sam Wiliams",
           "CustomerName2" : "Bob Johnson"
        },
        "SomeCustomerDetail2" : {
           "CustomerName1" : "Chris Brown",
           "CustomerName2" : "Mike Wilson"
        }
    }
}

3. ネストされた値で検索するクエリ

次に、辞書型構造の中にある特定の値でドキュメントを検索します。ポイントは、「親フィールド名.子フィールド名.孫フィールド名」のようにドット(.)でパスをつなげて指定することです。

> db.findInDictionaryDemo.find({"AllCustomerDetails.SomeCustomerDetail2.CustomerName2":"Mike Wilson"}).pretty();

このクエリは、「AllCustomerDetails」→「SomeCustomerDetail2」→「CustomerName2」の値が「Mike Wilson」と一致するドキュメントのみを取得します。実行結果は以下の通りです。

{
    "_id" : 102,
    "AllCustomerDetails" : {
        "SomeCustomerDetail1" : {
           "CustomerName1" : "Sam Wiliams",
           "CustomerName2" : "Bob Johnson"
        },
        "SomeCustomerDetail2" : {
           "CustomerName1" : "Chris Brown",
           "CustomerName2" : "Mike Wilson"
        }
    }
}

まとめ

MongoDBでネストされた辞書型構造を値で検索する場合は、find() メソッドの引数にドット記法によるフルパスを指定します。これにより、深い階層にあるフィールドでも正確に対象を絞り込んで検索できます。なお、検索対象のネストフィールドにインデックスを作成しておくと、大量データでも高速な検索が可能になります。

  1. MongoDBでfind()を使って名前からユーザーを検索する方法

    MongoDBでユーザーの名前をキーにドキュメントを検索したい場合は、find()メソッドを使用します。この記事では、実際にコレクションを作成し、名前を指定してユーザーを取得する手順を順番に解説します。1. コレクションの作成とドキュメントの挿入まず、insertOne()メソッドを使ってサンプル用のコレクション「demo504」にドキュメントを挿入します。> db.demo504.insertOne({Name:Chris});{ acknowledged : true, insertedId : ObjectId(5e8823ee987b6e0e9d18f570) } &

  2. MongoDBで価格が特定の値未満のレコードを検索する方法($lt演算子の使い方)

    MongoDBで、価格(Price)が特定の値より小さいレコードを検索したい場合には、比較クエリ演算子の一つである $lt(less than)を使用します。$ltは「指定した値より小さい」ドキュメントのみを抽出するための演算子です。この記事では、実際にコレクションを作成し、$lt演算子を使って条件に合致するドキュメントを検索する手順を順番に解説します。1. テスト用コレクションの作成まず、insertOne() メソッドを使って、サンプル用のコレクション「demo728」にドキュメントを挿入します。> db.demo728.insertOne({Price:75}); { ac