HOWTO · MongoDB

MongoDB クエリのネストされたオブジェクト

この記事では、MongoDB でネストされたオブジェクトを照会する方法を示します。

このページの内容

今日のチュートリアルでは、MongoDB でネストされたオブジェクトをクエリする方法を学びます。

MongoDB でネストされたオブジェクトを照会する

MongoDB は、コレクションから埋め込みまたはネストされたデータを取得したり、埋め込みまたはネストされたドキュメントを検索したりするための読み取り操作を提供します。

db.collection.find() メソッドの助けを借りて、読み取り操作を実行できます。 このメソッドは、埋め込みまたはネストされたコレクションからドキュメントを選択し、カーソルをそのドキュメントに戻します。

構文:

>db.collection.find($filter, $projection)

find() メソッドには、$filter$project の 2つのオプションがあります。以下で簡単に説明します。

  • $filter オプション

    Document タイプのパラメーターを使用して、ドキュメントを除外できます。 さらに、コレクション内のすべてのドキュメントにアクセスする場合は、空のドキュメントまたはこれらのパラメーターなしで使用できます。

  • $project オプション

    この引数を使用すると、指定されたクエリ フィルターを満たす特定のフィールドのみをドキュメントに取得できます。 もちろん、ドキュメントのすべてのフィールドを取得する場合は、このパラメーターを省略できます。

このメソッドは、指定されたクエリ条件に一致するドキュメントへのカーソルを返します。 find() メソッドは、使用時にドキュメントを返すため、使用時にドキュメントへのポインタを返します。

find() メソッドの詳細については こちら を参照してください。 次の例を使用して、概念を理解しましょう。

> db.users.find({address: {country: "United Kingdom"}}).pretty()
> db.users.find({address.country: "United Kingdom"}).pretty()

上記のサンプル コードは、英国出身のユーザーをすべて見つけるためにかなりのテクニックを使用しています。

これら 2つのアプローチの主な違いは、住所の前のチェックではフィールド { 国: ... } のみが含まれ、後者では 住所 が考慮されることです。

address の他のフィールドまたは address にないフィールドは、country フィールドには影響しません。 たとえば、上記のコードを MongoShell で実行すると、次の出力が表示されます。

出力:

{ "_id" : ObjectId("54f612b6029b47909a90cesd"), "email" : "johndoe@example.com", "comment" : "This is the first user in the collection.", "country" : "United Kingdom" }