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

MongoDBの$projectで配列内の特定フィールドだけを表示し、他のフィールドを除外する方法

MongoDBの集計パイプライン(Aggregation Pipeline)では、$projectと$unwindを組み合わせることで、配列内の特定のフィールドだけを表示できます。逆に、不要なフィールドを除外したい場合は、そのフィールドの値を0に設定します。

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

まず、ドキュメントを含むコレクションを作成しましょう。

> db.demo731.insertOne({ "ProductInformation": [ { ProductId:"Product-1", ProductPrice:80 }, { ProductId:"Product-2", ProductPrice:45 }, { ProductId:"Product-3", ProductPrice:50 } ] } );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5eac5efd56e85a39df5f6341")
}

find()メソッドですべてのドキュメントを表示

find()メソッドを使うと、コレクション内のすべてのドキュメントを確認できます。

> db.demo731.find();

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

{ "_id" : ObjectId("5eac5efd56e85a39df5f6341"), "ProductInformation" : [ { "ProductId" : "Product-1", "ProductPrice" : 80 }, { "ProductId" : "Product-2", "ProductPrice" : 45 }, { "ProductId" : "Product-3", "ProductPrice" : 50 } ] }

$projectを使って配列内の特定フィールドのみを表示するクエリ

以下は、MongoDBの$projectを使用して、配列内の特定のフィールドだけを表示するクエリの例です。処理の流れは以下のとおりです。

  • $unwind: 配列「ProductInformation」を個別のドキュメントに分解します。
  • $match: 「ProductPrice」が80であるドキュメントだけを抽出します。
  • $project: _idと「ProductPrice」を0に設定して非表示にし、「ProductId」のみを出力します。
> db.demo731.aggregate([
...    { $unwind: "$ProductInformation" },
...    { $match: { "ProductInformation.ProductPrice": 80} },
...    { $project: {_id: 0,"ProductInformation.ProductPrice":0}}
... ])

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

{ "ProductInformation" : { "ProductId" : "Product-1" } }

このように、$projectで表示したいフィールドを1(または省略時にデフォルトで含める)にし、除外したいフィールドを0に指定することで、配列内の必要な情報だけを柔軟に取り出すことができます。

  1. MongoDBで一意のレコードのみを表示し、重複データを除外する方法

    MongoDBのdistinct()メソッドで重複を除外するMongoDBで一意(ユニーク)なレコードのみを表示したい場合は、distinct()メソッドを使用します。このメソッドは、指定したフィールドの重複しない値だけを配列として返してくれます。ここでは、実際にサンプルコレクションを作成しながら、その使い方を確認していきましょう。1. サンプルコレクションの作成まず、insertOne()メソッドを使って、意図的に重複した名前を含むドキュメントをいくつか挿入します。> db.demo613.insertOne({Name:Chris});{ acknowledged : tru

  2. MongoDBの$projectで配列内の特定フィールドだけを表示し、他のフィールドを除外する方法

    MongoDBの集計パイプライン(Aggregation Pipeline)では、$projectと$unwindを組み合わせることで、配列内の特定のフィールドだけを表示できます。逆に、不要なフィールドを除外したい場合は、そのフィールドの値を0に設定します。サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成しましょう。> db.demo731.insertOne({ ProductInformation: [ { ProductId:Product-1, ProductPrice:80 }, { ProductId:Product-2, ProductPrice:45