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

MongoDBでオブジェクトの配列を検索できますか?


MongoDBでオブジェクト配列を検索する方法

はい、MongoDBではオブジェクトの配列を検索することが可能です。集計パイプライン(aggregate())の中で$unwindを使って配列を展開し、$matchで条件に一致する要素を抽出します。ここでは、実際の手順をサンプルコードとともに解説します。

1. コレクションの作成とドキュメントの挿入

まず、insertOne()メソッドを使って、オブジェクト配列を含むドキュメントをコレクションに登録します。

> db.demo623.insertOne(
...     {
...        _id:1,
...        details:[
...           {
...              Name:"Chris"
...           },
...           {
...              DueDate:new ISODate("2020-01-10")
...           },
...           {
...              CountryName:"US"
...           }
...        ]
...     }
... );
{ "acknowledged" : true, "insertedId" : 1 }

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

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

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

このクエリを実行すると、以下のような結果が出力されます。

{
    "_id" : 1,
    "details" : [
       {
          "Name" : "Chris"
       },
       {
          "DueDate" : ISODate("2020-01-10T00:00:00Z")
       },
       {
          "CountryName" : "US"
       }
    ]
}

3. オブジェクト配列を検索するクエリ

次に、MongoDBでオブジェクトの配列を検索するためのクエリを見ていきます。$unwinddetails配列を個々のドキュメントに展開し、$matchで「Name」が「Chris」と一致する要素だけを絞り込みます。さらに$projectを使うことで、出力するフィールドを必要なものだけに限定しています。

> db.demo623.aggregate({$unwind: "$details"},
... {$match: {"details.Name":"Chris"}},
... {$project: {"details.Name": 1}})

このクエリを実行すると、以下のように該当するオブジェクトのみが出力されます。

{ "_id" : 1, "details" : { "Name" : "Chris" } }

  1. 【JavaScript】配列内の複数オブジェクト間でメソッドを共有する方法(プロトタイプ活用)

    配列に格納された複数のオブジェクト間でメソッドを共有したい場合、JavaScriptのプロトタイプ(prototype)を利用するのが最も効率的です。 通常、オブジェクトごとに関数を個別に定義すると、インスタンスの数だけ同じ処理がメモリ上に複製されてしまいます。しかし、コンストラクター関数のprototypeにメソッドを定義すれば、そこから生成されたすべてのインスタンスが同一のメソッドを共有できるようになり、メモリの節約にもつながります。 以下は、プロトタイプを使って配列内の複数のPersonオブジェクト間でwelcome()メソッドを共有するコード例です。 サンプルコード <!DOCT

  2. MongoDBで配列内の一致オブジェクト数に基づいてドキュメントを検索する方法

    MongoDBでは、$where演算子とJavaScript関数を組み合わせることで、配列内に存在する一致したオブジェクトの数に基づいてドキュメントを検索できます。この記事では、具体的なサンプルを通じてその方法を解説します。サンプルデータの準備まずは、ドキュメントを含むコレクションを作成しましょう。> db.demo694.insertOne( ... { ... details : ... [ ... { ... Name : Chris, ... Age:21 ...