$[]

El operador $[] de DocumentDB se usa para actualizar todos los elementos de una matriz que coincidan con una condición especificada. Este operador permite realizar actualizaciones en varios elementos de una matriz sin especificar sus posiciones. Resulta especialmente útil cuando es necesario aplicar la misma actualización a todos los elementos de una matriz.

Syntax

db.collection.update(
   <query>,
   {
     $set: {
       <arrayField>.$[]: <value>
     }
   }
)

Parámetros

Parámetro Description
<query> Criterios de selección para los documentos que se van a actualizar.
<arrayField> Campo que contiene la matriz que se va a actualizar.
<value> Valor que se va a establecer para cada elemento coincidente de la matriz.

Examples

Considere este documento de ejemplo de la colección de tiendas.

{
    "_id": "0fcc0bf0-ed18-4ab8-b558-9848e18058f4",
    "name": "First Up Consultants | Beverage Shop - Satterfieldmouth",
    "location": {
        "lat": -89.2384,
        "lon": -46.4012
    },
    "staff": {
        "totalStaff": {
            "fullTime": 8,
            "partTime": 20
        }
    },
    "sales": {
        "totalSales": 75670,
        "salesByCategory": [
            {
                "categoryName": "Wine Accessories",
                "totalSales": 34440
            },
            {
                "categoryName": "Bitters",
                "totalSales": 39496
            },
            {
                "categoryName": "Rum",
                "totalSales": 1734
            }
        ]
    },
    "promotionEvents": [
        {
            "eventName": "Unbeatable Bargain Bash",
            "promotionalDates": {
                "startDate": {
                    "Year": 2024,
                    "Month": 6,
                    "Day": 23
                },
                "endDate": {
                    "Year": 2024,
                    "Month": 7,
                    "Day": 2
                }
            },
            "discounts": [
                {
                    "categoryName": "Whiskey",
                    "discountPercentage": 7
                },
                {
                    "categoryName": "Bitters",
                    "discountPercentage": 15
                },
                {
                    "categoryName": "Brandy",
                    "discountPercentage": 8
                },
                {
                    "categoryName": "Sports Drinks",
                    "discountPercentage": 22
                },
                {
                    "categoryName": "Vodka",
                    "discountPercentage": 19
                }
            ]
        },
        {
            "eventName": "Steal of a Deal Days",
            "promotionalDates": {
                "startDate": {
                    "Year": 2024,
                    "Month": 9,
                    "Day": 21
                },
                "endDate": {
                    "Year": 2024,
                    "Month": 9,
                    "Day": 29
                }
            },
            "discounts": [
                {
                    "categoryName": "Organic Wine",
                    "discountPercentage": 19
                },
                {
                    "categoryName": "White Wine",
                    "discountPercentage": 20
                },
                {
                    "categoryName": "Sparkling Wine",
                    "discountPercentage": 19
                },
                {
                    "categoryName": "Whiskey",
                    "discountPercentage": 17
                },
                {
                    "categoryName": "Vodka",
                    "discountPercentage": 23
                }
            ]
        }
    ]
}

Ejemplo 1: Actualización de porcentajes de descuento

Esta consulta actualiza todos los elementos de la matriz de descuentos dentro de cada evento de promoción.

db.stores.updateOne(
  { _id: "905d1939-e03a-413e-a9c4-221f74055aac" },
  {
    $inc: {
      "promotionEvents.$[].discounts.$[].discountPercentage": 5
    }
  }
)

Ejemplo 2: Actualización de ventas por categoría

Esta consulta aumenta las ventas totales de todas las categorías en 10% mediante el operador $[].

db.stores.update(
  { _id: "905d1939-e03a-413e-a9c4-221f74055aac" },
  {
    $mul: {
      "sales.salesByCategory.$[].totalSales": 1.10
    }
  }
)