On this page
$subtract (aggregation)
在本页面
Definition
$subtract
- 减去两个数字以返回差异,或者减去两个日期以毫秒为单位返回差异,或者减去日期和数字以毫秒为单位返回结果日期。
$subtract表达式具有以下语法:
{ $subtract: [ <expression1>, <expression2> ] }
从第一个参数中减去第二个参数。
参数可以是任何有效的expression,只要它们可以解析为数字和/或日期即可。要从日期中减去数字,日期必须是第一个参数。有关表达式的更多信息,请参见Expressions。
Examples
考虑包含以下文档的sales
集合:
{ "_id" : 1, "item" : "abc", "price" : 10, "fee" : 2, "discount" : 5, "date" : ISODate("2014-03-01T08:00:00Z") }
{ "_id" : 2, "item" : "jkl", "price" : 20, "fee" : 1, "discount" : 2, "date" : ISODate("2014-03-01T09:00:00Z") }
Subtract Numbers
以下聚合使用$subtract表达式通过从price
和fee
的小计中减去discount
来计算total
。
db.sales.aggregate( [ { $project: { item: 1, total: { $subtract: [ { $add: [ "$price", "$fee" ] }, "$discount" ] } } } ] )
该操作返回以下结果:
{ "_id" : 1, "item" : "abc", "total" : 7 }
{ "_id" : 2, "item" : "jkl", "total" : 19 }
减去两个日期
以下汇总使用$subtract表达式从当前日期减去$date
并返回以毫秒为单位的差:
db.sales.aggregate( [ { $project: { item: 1, dateDifference: { $subtract: [ new Date(), "$date" ] } } } ] )
该操作返回以下结果:
{ "_id" : 1, "item" : "abc", "dateDifference" : NumberLong("11713985194") }
{ "_id" : 2, "item" : "jkl", "dateDifference" : NumberLong("11710385194") }
从日期中减去毫秒
以下汇总使用$subtract表达式从“ $ date”字段中减去 5 * 60 * 1000 毫秒(5 分钟):
db.sales.aggregate( [ { $project: { item: 1, dateDifference: { $subtract: [ "$date", 5 * 60 * 1000 ] } } } ] )
该操作返回以下结果:
{ "_id" : 1, "item" : "abc", "dateDifference" : ISODate("2014-03-01T07:55:00Z") }
{ "_id" : 2, "item" : "jkl", "dateDifference" : ISODate("2014-03-01T08:55:00Z") }