Bagikan melalui


$multiply (ekspresi agregasi)

Operator $multiply menghitung produk ekspresi numerik dan didukung dalam operasi agregasi. Ini adalah alat yang berguna untuk mendapatkan bidang terhitung atau melakukan aritmatika dalam alur agregasi.

Sintaksis

{
  $multiply: [ <expression1>, <expression2>, ... ]
}
  • <expression1>: Ekspresi valid yang diselesaikan ke angka.
  • <expression2>: Ekspresi valid yang diselesaikan ke angka.
  • ...: Ekspresi tambahan, masing-masing menyelesaikan ke angka.

Contoh

Contoh 1: Mengalikan bidang dengan konstanta

Contoh ini menunjukkan cara menggandakan fullSales nilai bidang:

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

Hasilnya mencakup bidang asli sales dan bidang doubleSales baru yang dua kali nilai .sales.fullSales Ini akan menghasilkan output berikut:

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

Contoh 2: Menghitung total diskon selama promosi

Contoh ini menghitung total diskon untuk promosi dalam kategori "DJ Turntables":

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

Bidang totalDiscount diturunkan dengan mengalikan persentase diskon pertama dari promotionEvents array dengan totalSales nilai . Ini akan menghasilkan output berikut:

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

Contoh 3: Area komputasi persegi panjang

Contoh ini menghitung area persegi panjang yang diberikan width dan height:

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

Bidang yang area dihasilkan adalah produk persegi panjang width dan height. Ini akan menghasilkan output berikut:

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

Keterbatasan

  • Operator $multiply hanya berfungsi dengan ekspresi numerik. Menggunakannya dengan nilai non-numerik mengakibatkan kesalahan.
  • Berhati-hatilah terhadap masalah luapan atau presisi saat bekerja dengan sejumlah besar atau aritmatika floating-point.