你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
运算符 $multiply
计算数值表达式的乘积,并在聚合运算中受支持。 它是派生计算字段或在聚合管道中执行算术的有用工具。
语法
{
$multiply: [ <expression1>, <expression2>, ... ]
}
<expression1>
:解析为数字的有效表达式。<expression2>
:解析为数字的有效表达式。...
:其他表达式,每个表达式都解析为一个数字。
示例:
示例 1:将字段乘以常量
此示例演示如何将字段的值 fullSales
加倍:
db.collection.aggregate([
{
$project: {
sales: 1,
doubleSales: { $multiply: ["$sales.fullSales", 2] }
}
}
])
结果包括原始 sales
字段和一个新字段 doubleSales
,该值是值两 sales.fullSales
倍。 它将生成以下输出:
[
{ "_id": 1, "sales": { "fullSales": 100 }, "doubleSales": 200 },
{ "_id": 2, "sales": { "fullSales": 250 }, "doubleSales": 500 },
{ "_id": 3, "sales": { "fullSales": 400 }, "doubleSales": 800 }
]
示例 2:计算促销期间的总折扣
本示例计算“DJ 轮值表”类别中促销的总折扣:
db.collection.aggregate([
{
$project: {
promotionEvents: 1,
totalDiscount: {
$multiply: [
{ $arrayElemAt: ["$promotionEvents.discounts.discountPercentage", 0] },
"$sales.salesByCategory.totalSales"
]
}
}
}
])
该 totalDiscount
字段通过将数组中的第一个折扣百分比 promotionEvents
与 totalSales
值相乘来派生。 它将生成以下输出:
[
{
"_id": 4,
"promotionEvents": {
"discounts": [{ "discountPercentage": 0.10 }]
},
"sales": { "salesByCategory": { "totalSales": 5000 } },
"totalDiscount": 500
},
{
"_id": 5,
"promotionEvents": {
"discounts": [{ "discountPercentage": 0.15 }]
},
"sales": { "salesByCategory": { "totalSales": 10000 } },
"totalDiscount": 1500
}
]
示例 3:矩形的计算区域
本示例计算给定矩形 width
的面积和 height
:
db.collection.aggregate([
{
$project: {
width: 1,
height: 1,
area: { $multiply: ["$dimensions.width", "$dimensions.height"] }
}
}
])
生成的 area
字段是矩形的 width
乘积和 height
。 它将生成以下输出:
[
{ "_id": 6, "dimensions": { "width": 5, "height": 10 }, "area": 50 },
{ "_id": 7, "dimensions": { "width": 8, "height": 12 }, "area": 96 },
{ "_id": 8, "dimensions": { "width": 3, "height": 7 }, "area": 21 }
]
局限性
- 运算符
$multiply
仅适用于数值表达式。 将它与非数值一起使用会导致错误。 - 处理大量或浮点算术时,请谨慎处理溢出或精度问题。