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に指定することで、配列内の必要な情報だけを柔軟に取り出すことができます。
-
MongoDBで一意のレコードのみを表示し、重複データを除外する方法
MongoDBのdistinct()メソッドで重複を除外するMongoDBで一意(ユニーク)なレコードのみを表示したい場合は、distinct()メソッドを使用します。このメソッドは、指定したフィールドの重複しない値だけを配列として返してくれます。ここでは、実際にサンプルコレクションを作成しながら、その使い方を確認していきましょう。1. サンプルコレクションの作成まず、insertOne()メソッドを使って、意図的に重複した名前を含むドキュメントをいくつか挿入します。> db.demo613.insertOne({Name:Chris});{ acknowledged : tru
-
MongoDBの$projectで配列内の特定フィールドだけを表示し、他のフィールドを除外する方法
MongoDBの集計パイプライン(Aggregation Pipeline)では、$projectと$unwindを組み合わせることで、配列内の特定のフィールドだけを表示できます。逆に、不要なフィールドを除外したい場合は、そのフィールドの値を0に設定します。サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成しましょう。> db.demo731.insertOne({ ProductInformation: [ { ProductId:Product-1, ProductPrice:80 }, { ProductId:Product-2, ProductPrice:45