$subtract (減算)
最終更新:2026-10-09
$subtract (減算)
$subtract は集計式の中で減算を行います。$add の対になる演算子です。引数はちょうど 2 つで、数値−数値は差、日付−日付はミリ秒、日付−ミリ秒はより前の日付を返します。$project や $set で、割引後の価格や 2 つのタイムスタンプの経過時間などの差を求めるのに使われます。$add と違って $subtract は 2 引数のみを受け付け、複数のオペランドは扱えません。いずれかの引数が null または欠落していると null を返します。
| カテゴリ | 数学 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $subtract: [ <expression1>, <expression2> ] }
⚙️ パラメータ
| 被減数 | 数値、日付、またはそのいずれかに解決される式。 |
|---|---|
| 減数 | 被減数から引く数値(ミリ秒)または日付式。 |
戻り値:数値の差。日付から日付を引くとミリ秒、日付からミリ秒を引くと日付を返します
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $subtract: 割引後の価格を計算
db.orders.aggregate([
{ $project: {
finalPrice: { $subtract: ['$price', '$discount'] }
} }
])
出力:
{ '_id': 1, 'finalPrice': 90 }
{ '_id': 2, 'finalPrice': 45 }
📌 注意事項
- 引数はちょうど 2 つ。3 つ以上はエラーになる
- 日付−日付はミリ秒を返す。日に換算するには 86400000 で割る
- いずれかの引数が null・欠落だと null になる
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Q$subtract で 2 つの日付の日数差を計算できますか?
Aミリ秒で返されるので、日に換算するには 86400000 で割るか、$dateDiff の day 単位を使います。
Q$subtract と $add の関係は?
A互いに逆の関係です。$subtract は 2 引数、$add は複数引数を受け付けます。
Q日付からミリ秒を引くとどうなりますか?
Aより前の日付になります。たとえば注文日から 86400000 を引くと前日になります。