$subtract(减法)
最后更新:2026-10-09
$subtract(减法)
$subtract在聚合表达式中做减法,与$add相对。它接受两个参数:数值减数值得到差,日期减日期得到毫秒差,日期减毫秒数得到更早的新日期。常用于$project或$set阶段计算差值,例如优惠后价格或两个时间点之间的时长。注意$subtract只接受两个参数,且不能像$add那样接收多个操作数。任一参数为null或缺失时返回null。
| 分类 | 数学 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ $subtract: [ <表达式1>, <表达式2> ] }
⚙️ 参数
| 被减数 | 数值、日期或解析为这两类的表达式。 |
|---|---|
| 减数 | 数值(毫秒数)或日期表达式,从被减数中减去。 |
返回值:数值之差;日期减日期返回毫秒;日期减毫秒返回新日期
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $subtract:计算折扣后价格
db.orders.aggregate([
{ $project: {
finalPrice: { $subtract: ['$price', '$discount'] }
} }
])
运行结果:
{ '_id': 1, 'finalPrice': 90 }
{ '_id': 2, 'finalPrice': 45 }
📌 注意事项
- 只接受两个参数,多传会报错
- 日期减日期返回毫秒差,转成天数要除以86400000
- 任一参数为null或缺失,结果返回null
🏷️ 相关标签
💡 相关案例
更多实战案例即将上线,敬请期待。
📚 相关教程
❓ 常见问题
Q$subtract能计算两个日期的天数差吗?
A返回的是毫秒差,需除以86400000转成天数,或用$dateDiff直接按天求差。
Q$subtract和$add有什么关系?
A互为逆运算;$subtract只收两个参数,$add支持多个操作数。
Q日期减毫秒数会得到什么?
A得到一个更早的新日期,例如订单日期减86400000就是前一天。