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

MongoDBのプロジェクションでネストされたドキュメントから1つのフィールド以外をすべて除外する方法

概要

MongoDBのプロジェクションでは、表示したくないフィールドの値を0に設定することで、そのフィールドを検索結果から除外できます。これにより、find()を実行した際に、それ以外のすべての値が表示されます。

本記事では、ネストされたドキュメントから特定の1つのフィールド以外をすべて除外する具体的な手順を、サンプルコードと実行結果とともに解説します。

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

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

> db.demo237.insertOne({
...  _id:101,
...  Product: {
...     description1: {id:1001 },
...     description2: {Name:"Product-1" },
...     description3: {Price:550 }
...  }
...}
...);
{ "acknowledged" : true, "insertedId" : 101 }

作成したコレクションの内容を確認する

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

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

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

{
   "_id" : 101,
   "Product" : {
      "description1" : {
         "id" : 1001
      },
      "description2" : {
         "Name" : "Product-1"
      },
      "description3" : {
         "Price" : 550
      }
   }
}

プロジェクションで特定のフィールド以外を除外するクエリ

以下は、プロジェクションを使用して、ネストされたドキュメントから1つのフィールド(description2)以外をすべて除外するクエリの例です。除外したいProduct.description1Product.description3に0を指定しています。

> db.demo237.find({}, { "Product.description1": 0, "Product.description3": 0 });

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

{ "_id" : 101, "Product" : { "description2" : { "Name" : "Product-1" } } }

まとめ

このように、除外したいフィールドに0を指定するだけで、ネストされたドキュメントから必要なフィールドだけを簡単に取得できます。_idフィールドはデフォルトで常に返されるため、明示的に0を指定しない限り結果に含まれる点にも注意してください。

  1. MongoDBでドキュメントからサブドキュメントを削除する方法($pull演算子の使い方)

    MongoDBでは、ドキュメント内に埋め込まれたサブドキュメント(ネストされたドキュメント)を削除したいケースがよくあります。そのような場合に便利なのが、$pull 演算子です。$pull は update() メソッドと組み合わせて使用することで、配列から条件に一致する要素を取り除くことができます。サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成してみましょう。> db.demo538.insertOne( ... { ... id:101, ... details: ... { ... anotherDetails: ...

  2. MongoDBでドキュメントフィールドの値から別の値(TotalPrice − Discount)を差し引いて計算する方法

    MongoDBでは、aggregate()内の $subtract 演算子を使うことで、ドキュメントフィールドの値から別のフィールドの値を差し引いた結果を計算できます。例えば、総額(TotalPrice)から割引額(DiscountPrice)を引いた実質価格を求めるようなケースに便利です。サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成しましょう。以下のコマンドでコレクションにドキュメントを挿入します。> db.demo599.insertOne({TotalPrice:250,DiscountPrice:35});{    ackno