你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

$multiply (聚合表达式)

运算符 $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 字段通过将数组中的第一个折扣百分比 promotionEventstotalSales 值相乘来派生。 它将生成以下输出:

[
  {
    "_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 仅适用于数值表达式。 将它与非数值一起使用会导致错误。
  • 处理大量或浮点算术时,请谨慎处理溢出或精度问题。