Поделиться через


$[identifier] (как оператор обновления массива)

Оператор обновления массива $[identifier] в Azure Cosmos DB для виртуального ядра MongoDB используется для обновления определенных элементов в массиве, соответствующего заданному условию. Этот оператор особенно полезен, если необходимо обновить несколько элементов в массиве на основе определенных критериев. Это позволяет более детализировать обновления в документах, что делает его мощным инструментом для управления сложными структурами данных.

javascript

{
  "<update operator>": {
    "<array field>.$[<identifier>]": <value>
  }
},
{
  "arrayFilters": [
    { "<identifier>.<field>": <condition> }
  ]
}

Параметры

Параметр Описание
<update operator> Оператор обновления, применяемый (например, $set, $incи т. д.).
<array field> Поле, содержащее массив для обновления.
<identifier> Заполнитель, используемый для arrayFilters сопоставления определенных элементов в массиве.
<value> Значение, которое необходимо задать или обновить.
arrayFilters Массив условий фильтрации для определения элементов для обновления.
<field> Проверяемое поле в элементах массива.
<condition> Условие обновления элементов массива.

Примеры

Пример 1. Обновление процента скидки для конкретной категории

Предположим, вы хотите обновить процент скидки для категории "Ноутбуки" в мероприятии "Праздничные специальные".

db.collection.update(
  { "store.storeId": "12345", "store.promotionEvents.eventName": "Holiday Specials" },
  {
    $set: {
      "store.promotionEvents.$[event].discounts.$[discount].discountPercentage": 18
    }
  },
  {
    arrayFilters: [
      { "event.eventName": "Holiday Specials" },
      { "discount.categoryName": "Laptops" }
    ]
  }
)

Пример 2. Увеличение общего объема продаж по категориям

Предположим, вы хотите увеличить общий объем продаж для категории "Смартфоны" на $ 10000.

db.collection.update(
  { "store.storeId": "12345" },
  {
    $inc: {
      "store.sales.salesByCategory.$[category].totalSales": 10000
    }
  },
  {
    arrayFilters: [
      { "category.categoryName": "Smartphones" }
    ]
  }
)