Bagikan melalui


$addFields (agregasi)

Tahap $addFields dalam alur agregasi digunakan untuk menambahkan bidang baru ke dokumen. Ini juga dapat digunakan untuk mengatur ulang nilai bidang yang ada. Tahap ini sangat berguna ketika Anda perlu membuat bidang baru berdasarkan data yang ada atau memodifikasi bidang yang ada dalam dokumen Anda.

Sintaksis

Sintaks dasar untuk tahap $addFields adalah sebagai berikut:

{
  $addFields: {
    <newField1>: <expression1>,
    <newField2>: <expression2>,
    ...
  }
}

Parameter-parameternya

Deskripsi
newField1 Nama bidang baru yang akan ditambahkan atau bidang yang sudah ada untuk diubah.
expression1 Ekspresi untuk menghitung nilai newField1.

Contoh

Contoh 1: Menambahkan Bidang Baru

Misalkan kita memiliki koleksi bernama toko dengan dokumen yang mirip dengan struktur JSON yang disediakan. Untuk menambahkan bidang baru totalDiscountEvents yang menghitung jumlah peristiwa promosi, kita dapat menggunakan alur agregasi berikut:

db.stores.aggregate([
  {
    $addFields: {
      totalDiscountEvents: { $size: "$store.promotionEvents" }
    }
  }
])

Contoh keluaran

[
  {
    "_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
    "store": {
      "name": "Downtown Store",
      "promotionEvents": ["Summer Sale", "Black Friday", "Holiday Deals"]
    },
    "totalDiscountEvents": 3
  }
]

Contoh 2: Memodifikasi Bidang yang Sudah Ada

Jika kita ingin menambahkan bidang totalStaffCount yang menjumlahkan staf penuh waktu dan paruh waktu, kita dapat menggunakan:

db.stores.aggregate([
  {
    $addFields: {
      totalStaffCount: {
        $add: ["$store.staff.totalStaff.fullTime", "$store.staff.totalStaff.partTime"]
      }
    }
  }
])

Contoh keluaran

[
  {
    "_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
    "store": {
      "name": "Downtown Store",
      "staff": {
        "totalStaff": {
          "fullTime": 12,
          "partTime": 8
        }
      }
    },
    "totalStaffCount": 20
  }
]

Contoh 3: Menambahkan Bidang Berlapis

Untuk menambahkan bidang berlapis location.coordinates yang menggabungkan garis lintang dan bujur ke dalam array, gunakan:

db.stores.aggregate([
  {
    $addFields: {
      "store.location.coordinates": ["$store.location.lat", "$store.location.lon"]
    }
  }
])

Contoh keluaran

[
  {
    "_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
    "store": {
      "name": "Downtown Store",
      "location": {
        "lat": 47.6097,
        "lon": -122.3331,
        "coordinates": [47.6097, -122.3331]
      }
    }
  }
]