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

MongoDBで配列内の要素を指定して特定のドキュメントを取得する方法

MongoDBのfind()でドット表記を使った特定ドキュメントの取得

MongoDBで配列内に格納されたフィールドの値を条件に、特定のドキュメントだけを取得したい場合は、find()メソッドとドット表記(dot notation)を組み合わせるのが基本です。この記事では、実際のコード例を通して、その手順をわかりやすく解説します。

1. サンプルコレクションとドキュメントの作成

まずはテスト用のコレクションを作成し、配列の中にオブジェクトを持つドキュメントを挿入してみましょう。insertOne()メソッドを使用して、以下のように3件のドキュメントを登録します。

> db.demo672.insertOne({Brand:[{CategoryName:"Mobile",Name:"Oppo"}]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea3ea9b04263e90dac943e5")
}
> db.demo672.insertOne({Brand:[{CategoryName:"Mobile",Name:"Samsung"}]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea3eaa404263e90dac943e6")
}
> db.demo672.insertOne({Brand:[{CategoryName:"Mobile",Name:"OnePlus"}]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea3eacc04263e90dac943e7")
}

ここではBrandという配列フィールドの中に、CategoryNameNameを持つオブジェクトが格納されています。

2. コレクション内の全ドキュメントを表示する

挿入したデータを確認するために、find()メソッドで全ドキュメントを表示します。

> db.demo672.find();

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

{ "_id" : ObjectId("5ea3ea9b04263e90dac943e5"), "Brand" : [ { "CategoryName" : "Mobile", "Name" : "Oppo" } ] }
{ "_id" : ObjectId("5ea3eaa404263e90dac943e6"), "Brand" : [ { "CategoryName" : "Mobile", "Name" : "Samsung" } ] }
{ "_id" : ObjectId("5ea3eacc04263e90dac943e7"), "Brand" : [ { "CategoryName" : "Mobile", "Name" : "OnePlus" } ] }

3件のドキュメントが正しく登録されていることが確認できます。

3. ドット表記で特定のドキュメントを検索する

それでは本題です。配列内のオブジェクトフィールドを条件に指定するには、「配列名.フィールド名」という形式でクエリを記述します。今回は「Name」が「OnePlus」であるドキュメントを取得してみましょう。

> db.demo672.find({"Brand.Name":"OnePlus"});

このクエリを実行すると、条件に一致したドキュメントのみが出力されます。

{ "_id" : ObjectId("5ea3eacc04263e90dac943e7"), "Brand" : [ { "CategoryName" : "Mobile", "Name" : "OnePlus" } ] }

ポイントまとめ

  • 配列内のオブジェクトフィールドを検索条件にするには、"配列名.フィールド名": 値 の形式でドット表記を使う。
  • ドット表記のキーは必ずダブルクォーテーションで囲む必要がある。
  • この方法なら、配列内のどの位置にあるオブジェクトでも自動的にマッチングされるため、インデックス番号を意識せずに検索できる。

このように、MongoDBではドット表記を活用することで、ネストされた配列やサブドキュメントに対しても柔軟かつ直感的なクエリを実行できます。ぜひ実際のプロジェクトでも活用してみてください。

  1. MongoDBのaggregate()で3階層にネストされた埋め込みドキュメントの配列をフィルタリングする方法

    MongoDBでネストされた配列をフィルタリングする基本アプローチMongoDBで3階層にネストされた埋め込みドキュメントの配列をフィルタリングするには、aggregate()メソッドを使用します。集計パイプラインの中で$unwindによって配列を展開し、$matchで条件に一致するドキュメントを絞り込むのが基本的な流れです。この記事では、実際のコード例を通じて具体的な手順を解説します。1. サンプルコレクションの作成まずは動作確認用のコレクションを作成し、ドキュメントを挿入してみましょう。> db.demo736.insertOne( ... { ... _id:

  2. MongoDBで配列をクエリして特定の値を取得する方法

    配列から特定の値を取得するには、aggregate()メソッドと$projectステージを組み合わせて使用します。まずは、ドキュメントを含むコレクションを作成してみましょう。 > db.demo761.insertOne( ...    { ...        "details": [ ...            { ...                "