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

$multiply (聚合)

本页面

  • 定义
  • 行为
  • 示例
$multiply

将数字相乘并返回结果。将参数传递给$multiply的数组中。

$multiply表达式具有以下语法

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

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

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

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

当输入类型混合时,$multiply 将较小的输入类型提升为两种类型中较大的那一个。类型被认为更大,因为它代表更广泛的值范围。数值类型的顺序从最小到最大为:整数 → 长整型 → 双精度浮点型 → 小数

较大的输入类型还决定了结果类型,除非操作溢出并且超出了较大数据类型所表示的范围。在溢出情况下,$multiply 根据以下顺序提升结果

  • 如果较大的输入类型是 整数,则结果类型提升为 长整型

  • 如果较大的输入类型是 长整型,则结果类型提升为 双精度浮点型

  • 如果较大的类型是 双精度浮点型小数,则溢出结果表示为 + 或 - 无穷大。结果不会提升类型。

考虑一个具有以下文档的 sales 集合

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

以下聚合使用 $multiply 表达式在 $project 管道中乘以 pricequantity 字段

db.sales.aggregate(
[
{ $project: { date: 1, item: 1, total: { $multiply: [ "$price", "$quantity" ] } } }
]
)

该操作返回以下结果

{ "_id" : 1, "item" : "abc", "date" : ISODate("2014-03-01T08:00:00Z"), "total" : 20 }
{ "_id" : 2, "item" : "jkl", "date" : ISODate("2014-03-01T09:00:00Z"), "total" : 20 }
{ "_id" : 3, "item" : "xyz", "date" : ISODate("2014-03-15T09:00:00Z"), "total" : 50 }

返回

月份