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

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

MongoDBでは、aggregate()内の $subtract 演算子を使うことで、ドキュメントフィールドの値から別のフィールドの値を差し引いた結果を計算できます。例えば、総額(TotalPrice)から割引額(DiscountPrice)を引いた実質価格を求めるようなケースに便利です。

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

まず、ドキュメントを含むコレクションを作成しましょう。以下のコマンドでコレクションにドキュメントを挿入します。

> db.demo599.insertOne({"TotalPrice":250,"DiscountPrice":35});{
   "acknowledged" : true, "insertedId" : ObjectId("5e948192f5f1e70e134e2696")
}
> db.demo599.insertOne({"TotalPrice":400,"DiscountPrice":10});{
   "acknowledged" : true, "insertedId" : ObjectId("5e948199f5f1e70e134e2697")
}
> db.demo599.insertOne({"TotalPrice":1550,"DiscountPrice":50});{
   "acknowledged" : true, "insertedId" : ObjectId("5e9481a0f5f1e70e134e2698")
}

挿入したドキュメントの確認

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

> db.demo599.find();

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

{ "_id" : ObjectId("5e948192f5f1e70e134e2696"), "TotalPrice" : 250, "DiscountPrice" : 35 }
{ "_id" : ObjectId("5e948199f5f1e70e134e2697"), "TotalPrice" : 400, "DiscountPrice" : 10 }
{ "_id" : ObjectId("5e9481a0f5f1e70e134e2698"), "TotalPrice" : 1550, "DiscountPrice" : 50 }

$subtract を使った減算クエリ

それでは、ドキュメントフィールドの値から別の値を差し引くクエリを見てみましょう。$project ステージの中で $subtract を使用し、「TotalPrice」から「DiscountPrice」を引いた結果を「ActualPrice」という新しいフィールドとして出力します。

> db.demo599.aggregate( [ { $project: {ActualPrice: { $subtract: [ "$TotalPrice", "$DiscountPrice" ] } } } ] )

この集計パイプラインを実行すると、以下の出力が得られます。

{ "_id" : ObjectId("5e948192f5f1e70e134e2696"), "ActualPrice" : 215 }
{ "_id" : ObjectId("5e948199f5f1e70e134e2697"), "ActualPrice" : 390 }
{ "_id" : ObjectId("5e9481a0f5f1e70e134e2698"), "ActualPrice" : 1500 }

ポイントまとめ

  • $subtract は配列形式で [ "$減算されるフィールド", "$減算するフィールド" ] の順に指定します。
  • $project ステージと組み合わせることで、元のドキュメントには存在しない計算結果フィールド(ここでは ActualPrice)を生成できます。
  • 数値型同士だけでなく、日付(Date)から数値を引くことで日時の差分を求めることも可能です。

このように、MongoDBの集計フレームワークを活用すれば、保存済みのデータから動的に計算した値を簡単に取得でき、アプリケーション側での処理負荷を軽減することもできます。

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

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

  2. MongoDBドキュメントから特定の値をフィルタリングする方法

    MongoDBドキュメントから特定の値をフィルタリングする方法MongoDBでドキュメント内の配列から特定の値を抽出したい場合は、集計パイプラインで $filter を使用します。この記事では、実際にコレクションを作成し、特定の条件に一致する要素だけをフィルタリングする手順を、サンプルコードとともに解説します。1. サンプルコレクションの作成まず、insertOne() メソッドを使って、配列フィールドを含むドキュメントを持つコレクションを作成します。 db.demo751.insertOne( ... { ... _id: 101, ... details: [