Condividi tramite


$multiply (espressione di aggregazione)

L'operatore $multiply calcola il prodotto di espressioni numeriche ed è supportato nelle operazioni di aggregazione. Si tratta di uno strumento utile per derivare campi calcolati o eseguire operazioni aritmetiche all'interno delle pipeline di aggregazione.

Sintassi

{
  $multiply: [ <expression1>, <expression2>, ... ]
}
  • <expression1>: espressione valida che viene risolta in un numero.
  • <expression2>: espressione valida che viene risolta in un numero.
  • ...: espressioni aggiuntive, ognuna delle quali viene risolta in un numero.

Esempio

Esempio 1: Moltiplicare un campo per una costante

In questo esempio viene illustrato come raddoppiare il valore del fullSales campo:

db.collection.aggregate([
  {
    $project: {
      sales: 1,
      doubleSales: { $multiply: ["$sales.fullSales", 2] }
    }
  }
])

Il risultato include il campo originale sales e un nuovo campo doubleSales che è due volte il valore di sales.fullSales. Produrrà l'output seguente:

[
  { "_id": 1, "sales": { "fullSales": 100 }, "doubleSales": 200 },
  { "_id": 2, "sales": { "fullSales": 250 }, "doubleSales": 500 },
  { "_id": 3, "sales": { "fullSales": 400 }, "doubleSales": 800 }
]

Esempio 2: Calcolare gli sconti totali durante una promozione

In questo esempio viene calcolato lo sconto totale per una promozione nella categoria "DJ Turntables":

db.collection.aggregate([
  {
    $project: {
      promotionEvents: 1,
      totalDiscount: {
        $multiply: [
          { $arrayElemAt: ["$promotionEvents.discounts.discountPercentage", 0] },
          "$sales.salesByCategory.totalSales"
        ]
      }
    }
  }
])

Il totalDiscount campo viene derivato moltiplicando la prima percentuale di sconto dalla promotionEvents matrice con il totalSales valore . Produrrà l'output seguente:

[
  {
    "_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
  }
]

Esempio 3: Area di calcolo di un rettangolo

In questo esempio viene calcolata l'area di un rettangolo in base a width e height:

db.collection.aggregate([
  {
    $project: {
      width: 1,
      height: 1,
      area: { $multiply: ["$dimensions.width", "$dimensions.height"] }
    }
  }
])

Il campo risultante area è il prodotto del rettangolo width e height. Produrrà l'output seguente:

[
  { "_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 }
]

Limiti

  • L'operatore $multiply funziona solo con espressioni numeriche. L'uso con valori non numerici genera un errore.
  • Prestare attenzione a problemi di overflow o precisione quando si lavora con numeri elevati o aritmetica a virgola mobile.