$[]

Der Operator $[] in DocumentDB wird verwendet, um alle Elemente in einem Array zu aktualisieren, das einer angegebenen Bedingung entspricht. Mit diesem Operator können Sie Aktualisierungen für mehrere Elemente in einem Array ausführen, ohne ihre Positionen anzugeben. Es ist besonders hilfreich, wenn Sie dasselbe Update auf alle Elemente in einem Array anwenden müssen.

Syntax

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

Die Parameter

Parameter Description
<query> Die Auswahlkriterien für die zu aktualisierenden Dokumente.
<arrayField> Das Feld, das das zu aktualisierende Array enthält.
<value> Der Wert, der für jedes übereinstimmende Element im Array festgelegt werden soll.

Examples

Betrachten Sie dieses Beispieldokument aus der Stores-Sammlung.

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

Beispiel 1: Aktualisieren von Rabattprozentsätzen

Diese Abfrage aktualisiert alle Elemente im Rabattarray innerhalb jedes Heraufstufungsereignisses.

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

Beispiel 2: Aktualisieren von Verkäufen nach Kategorie

Diese Abfrage erhöht den Gesamtumsatz für alle Kategorien um 10% mithilfe des Operators $[].

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