Bagikan melalui


$ (operator posisi)

BERLAKU UNTUK: MongoDB vCore

Operator $ posisi mengidentifikasi elemen dalam array untuk diperbarui tanpa secara eksplisit menentukan posisi elemen dalam array. Operator $ bertindak sebagai tempat penampung untuk elemen pertama yang cocok dengan kondisi kueri, dan bidang array harus muncul sebagai bagian dari dokumen kueri.

Sintaksis

Sintaks untuk $ operator posisi adalah sebagai berikut:

db.collection.updateOne(
  { <array>: <value> },
  { <update operator>: { "<array>.$": <value> } }
)

Parameter-parameternya

Deskripsi
array Bidang array yang berisi elemen yang akan diperbarui. Harus menjadi bagian dari kondisi kueri.
value Nilai yang digunakan untuk mencocokkan elemen array dalam kondisi kueri.
update operator Operator pembaruan yang akan diterapkan (misalnya, , $set, $inc$unset).

Contoh

Mari kita pahami penggunaan dengan sampel JSON dari himpunan stores data.

{
  "_id": "905d1939-e03a-413e-a9c4-221f74055aac",
  "name": "Trey Research | Home Office Depot - Lake Freeda",
  "location": { "lat": -48.9752, "lon": -141.6816 },
  "staff": { "employeeCount": { "fullTime": 12, "partTime": 19 } },
  "sales": {
    "salesByCategory": [ { "categoryName": "Desk Lamps", "totalSales": 37978 } ],
    "revenue": 37978
  },
  "promotionEvents": [
    {
      "eventName": "Crazy Deal Days",
      "promotionalDates": {
        "startDate": { "Year": 2023, "Month": 9, "Day": 27 },
        "endDate": { "Year": 2023, "Month": 10, "Day": 4 }
      },
      "discounts": [
        { "categoryName": "Desks", "discountPercentage": 22 },
        { "categoryName": "Filing Cabinets", "discountPercentage": 23 }
      ]
    },
    {
      "eventName": "Incredible Markdown Mania",
      "promotionalDates": {
        "startDate": { "Year": 2023, "Month": 12, "Day": 26 },
        "endDate": { "Year": 2024, "Month": 1, "Day": 2 }
      },
      "discounts": [
        { "categoryName": "Monitor Stands", "discountPercentage": 20 },
        { "categoryName": "Desks", "discountPercentage": 24 }
      ]
    }
  ]
}

Contoh 1: Memperbarui persentase diskon untuk kategori tertentu

Contoh memperbarui persentase diskon untuk kategori "Meja" dalam acara promosi pertama yang cocok.

db.stores.updateOne(
  { 
    "_id": "905d1939-e03a-413e-a9c4-221f74055aac",
    "promotionEvents.discounts.categoryName": "Desks"
  },
  {
    $set: { "promotionEvents.$.discounts.$[elem].discountPercentage": 25 }
  },
  {
    arrayFilters: [{ "elem.categoryName": "Desks" }]
  }
)

Contoh 2: Memperbarui total kategori penjualan

Contoh memperbarui total penjualan untuk kategori tertentu menggunakan $ (positional operator).

db.stores.updateOne(
  { 
    "_id": "905d1939-e03a-413e-a9c4-221f74055aac",
    "sales.salesByCategory.categoryName": "Desk Lamps"
  },
  {
    $inc: { "sales.salesByCategory.$.totalSales": 1000 }
  }
)

Kueri meningkatkan total penjualan untuk kategori "Lampu Meja" sebesar 1000, memperbaruinya dari 37978 menjadi 38978.

{
  "_id": "905d1939-e03a-413e-a9c4-221f74055aac",
  "sales": {
    "salesByCategory": [ { "categoryName": "Desk Lamps", "totalSales": 38978 } ],
    "revenue": 37978
  }
}