$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 (Shell)

📝 语法

{ $dateSubtract: { startDate: <日期表达式>, unit: <时间单位>, amount: <数值>, timezone: <时区> } }

⚙️ 参数

startDate要被减的日期,可为 Date、时间戳或日期表达式。
unit时间单位:year、month、week、day、hour、minute、second、millisecond。
amount减去的数量,正数减、负数加;超出 int64 范围会报错。
timezone可选,计算基于的时区。

返回值:减去后的新日期(BSON Date);startDate 为 null 或缺失时返回 null。

▶ 示例

请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):

// $dateSubtract:到期日前 3 天发提醒(按东八区)
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%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏