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.description1とProduct.description3に0を指定しています。
> db.demo237.find({}, { "Product.description1": 0, "Product.description3": 0 });このクエリを実行すると、次の出力が得られます。
{ "_id" : 101, "Product" : { "description2" : { "Name" : "Product-1" } } }まとめ
このように、除外したいフィールドに0を指定するだけで、ネストされたドキュメントから必要なフィールドだけを簡単に取得できます。_idフィールドはデフォルトで常に返されるため、明示的に0を指定しない限り結果に含まれる点にも注意してください。
-
MongoDBでドキュメントからサブドキュメントを削除する方法($pull演算子の使い方)
MongoDBでは、ドキュメント内に埋め込まれたサブドキュメント(ネストされたドキュメント)を削除したいケースがよくあります。そのような場合に便利なのが、$pull 演算子です。$pull は update() メソッドと組み合わせて使用することで、配列から条件に一致する要素を取り除くことができます。サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成してみましょう。> db.demo538.insertOne( ... { ... id:101, ... details: ... { ... anotherDetails: ...
-
MongoDBでドキュメントフィールドの値から別の値(TotalPrice − Discount)を差し引いて計算する方法
MongoDBでは、aggregate()内の $subtract 演算子を使うことで、ドキュメントフィールドの値から別のフィールドの値を差し引いた結果を計算できます。例えば、総額(TotalPrice)から割引額(DiscountPrice)を引いた実質価格を求めるようなケースに便利です。サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成しましょう。以下のコマンドでコレクションにドキュメントを挿入します。> db.demo599.insertOne({TotalPrice:250,DiscountPrice:35});{ ackno