文档菜单
文档首页
/
MongoDB 手册
/ / /

$add (聚合)

本页内容

  • 定义
  • 行为
  • 示例
$add

将数字相加或将数字和日期相加。如果其中一个参数是日期,$add 将其他参数视为添加到日期的毫秒数。

$add 表达式具有以下语法

{ $add: [ <expression1>, <expression2>, ... ] }

参数可以是任何有效的表达式,只要它们解析为所有数字或数字和日期。有关表达式的更多信息,请参阅表达式运算符。

从MongoDB 6.1版本开始,您可以优化 $add 操作。为了提高性能,请在参数列表末尾分组引用。例如,

$add: [ 1, 2, 3, '$a', '$b', '$c' ]

当输入类型混合时,$add 将较小的输入类型提升为两个中较大的一个。类型越大,表示的值范围越广。数值类型的顺序从最小到最大为:整数 → 长整数 → 双精度浮点数 → 小数

输入类型中较大的一个还决定了结果类型,除非操作溢出并且超出了该较大数据类型表示的范围。在溢出情况下,$add 将结果提升按照以下顺序

  • 如果较大的输入类型是 integer,则结果类型提升为 long

  • 如果较大的输入类型是 long,则结果类型提升为 double

  • 如果较大类型是 doubledecimal,则溢出结果表示为 + 或 - 无穷大。结果没有类型提升。

当将 Date 和非整数操作数混合时,$add 在执行操作之前将非整数值四舍五入到最接近的整数。

以下示例使用具有以下文档的 sales 集合

{ "_id" : 1, "item" : "abc", "price" : 10, "fee" : 2, date: ISODate("2014-03-01T08:00:00Z") }
{ "_id" : 2, "item" : "jkl", "price" : 20, "fee" : 1, date: ISODate("2014-03-01T09:00:00Z") }
{ "_id" : 3, "item" : "xyz", "price" : 5, "fee" : 0, date: ISODate("2014-03-15T09:00:00Z") }

以下聚合操作使用 $add 表达式在 $project 管道中计算总成本

db.sales.aggregate(
[
{ $project: { item: 1, total: { $add: [ "$price", "$fee" ] } } }
]
)

此操作返回以下结果

{ "_id" : 1, "item" : "abc", "total" : 12 }
{ "_id" : 2, "item" : "jkl", "total" : 21 }
{ "_id" : 3, "item" : "xyz", "total" : 5 }

以下聚合操作使用$add表达式,通过将date字段加上3*24*60*60000毫秒(即3天)来计算billing_date

db.sales.aggregate(
[
{ $project: { item: 1, billing_date: { $add: [ "$date", 3*24*60*60000 ] } } }
]
)

此操作返回以下结果

{ "_id" : 1, "item" : "abc", "billing_date" : ISODate("2014-03-04T08:00:00Z") }
{ "_id" : 2, "item" : "jkl", "billing_date" : ISODate("2014-03-04T09:00:00Z") }
{ "_id" : 3, "item" : "xyz", "billing_date" : ISODate("2014-03-18T09:00:00Z") }

返回

$acosh

本页内容