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

MongoDBのアグリゲートで配列の値のみを取得する方法

MongoDBでドキュメント内の配列から「値」だけを抽出したい場合、アグリゲーションパイプラインの $project ステージと $map 演算子を組み合わせることで実現できます。本記事では、具体的なサンプルコードとともにその手順をわかりやすく解説します。

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

まず、ドキュメントを含むコレクションを作成します。以下では insertOne() メソッドを使用して、「Information」という配列フィールドを持つドキュメントを挿入しています。

> db.demo411.insertOne(
...    {
...       "Information" : [
...          {
...             "Name1" : "Chris",
...             "Name2" : "David"
...          },
...          {
...             "Name1" : "John",
...             "Name2" : "John"
...          }
...       ]
...    }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e70f19715dc524f70227682")
}

登録済みドキュメントの確認

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

> db.demo411.find();

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

{ "_id" : ObjectId("5e70f19715dc524f70227682"), "Information" : [ { "Name1" : "Chris", "Name2" : "David" }, { "Name1" : "John", "Name2" : "John" } ] }

配列の値のみを取得するアグリゲートクエリ

ここからが本題です。配列内の値(キーを除いたデータ本体)だけを取得するには、以下のように aggregate() メソッドを使用します。

> db.demo411.aggregate(
...    [
...       {$project : {
...          _id : 0,
...          Information : {$map : {input : "$Information", as : "out", in : ["$$out.Name1", "$$out.Name2"]}}
...          }
...       }
...    ]
... )

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

{ "Information" : [ [ "Chris", "David" ], [ "John", "John" ] ] }

クエリのポイント解説

  • $project:出力に含めるフィールドを指定するステージです。_id : 0 とすることで、デフォルトで出力される _id フィールドを除外しています。
  • $map:配列の各要素に対して処理を適用し、新しい配列を生成する演算子です。input に元の配列、as に各要素を参照するための変数名、in に変換後の式を指定します。
  • $$out.Name1 / $$out.Name2:変数 out を通じて、各要素から Name1Name2 の値のみを取り出し、新しい配列として構築しています。

このように、$project$map を組み合わせることで、ネストされた配列から必要な値だけを効率的に抽出できます。フィールド名や配列の構成は実際のデータに合わせて自由に変更できるので、ぜひご自身のプロジェクトでも活用してみてください。

  1. MongoDBコレクションから一意の値(重複なし)を取得する方法【distinct()の使い方】

    MongoDBでコレクション内の重複データを除外し、一意の値だけを取得したい場合は、distinct()メソッドを使用します。distinct()は、指定したフィールドに含まれる重複しない値を1つのコレクション全体から検索し、その結果を配列として返します。サンプルコレクションの作成まず、insertOne()を使ってドキュメントを挿入し、コレクションを作成します。> db.demo704.insertOne({"LanguageCode":"hi"}); { "acknowledged" : true, &quo

  2. MongoDBでグループごとの最大値を取得する方法($sortと$groupの活用)

    MongoDBで、重複している個別の要素(グループ)ごとに最大値を取得したい場合、aggregate()メソッドと$sort・$groupステージを組み合わせることで実現できます。この記事では、実際のコード例を通じて、その手順をわかりやすく解説します。サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成します。ここではdemo750というコレクションに、idとvalueフィールドを持つドキュメントを挿入します。> db.demo750.insertOne({id:101,value:50}); { acknowledged : true, inserted