$dateSubtract (日付からの減算)

最終更新:2026-10-09

$dateSubtract (日付からの減算)

$dateSubtract は日付から指定した時間単位の量を減算し、新しい日付を返します。$dateAdd の鏡像にあたる演算子です。会員の有効期限、クーポンの開始日、リテンション期間の計算に最適です。unit には year、month、week、day、hour、minute、second、millisecond を指定でき、amount が負の場合は加算と同等になります。timezone は任意で、使用する暦を定義します。$dateAdd と同様に $project、$set などのステージで使えます。date が null・欠落だと null を返します。

カテゴリ日付
MongoDB バージョン5.0+
例の言語mongosh(シェル)

📝 構文

{ $dateSubtract: { startDate: <date-expression>, unit: <unit>, amount: <number>, timezone: <timezone> } }

⚙️ パラメータ

startDate減算の対象となる日付。Date、timestamp、または日付式。
unit単位: year、month、week、day、hour、minute、second、または millisecond。
amount減算する量。正は減算、負は加算。int64 の範囲を超えると例外を送出します。
timezone計算に使用する任意のタイムゾーン。

戻り値:新しい日付(BSON Date)。startDate が null または欠落している場合は null。

▶ 例

以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):

// $dateSubtract: 期限日の 3 日前にリマインド(UTC+8)
db.orders.aggregate([
  { $project: {
      remindAt: { $dateSubtract: { startDate: '$dueDate', unit: 'day', amount: 3, timezone: '+08:00' } }
  } }
])

出力:

{ "_id": 1, "remindAt": ISODate("2026-10-22T00:00:00Z") }
{ "_id": 2, "remindAt": ISODate("2026-11-12T00:00:00Z") }

📌 注意事項

さらなる実践ケースを近日公開予定。

📚 関連チュートリアル

❓ よくある質問

Q$dateSubtract と $dateAdd の関係は?
Aパラメータは同じで方向が逆です。負の amount を使えば両者は同等になります。
Q結果が 1970 年より前になることはありますか?
Aはい。BSON Date は 1970 年より前の負のタイムスタンプをサポートしています。
Q$dateDiff との違いは?
A$dateSubtract は新しい日付を返します。$dateDiff は整数の差分を返します。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%