Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Matrisuppdateringsoperatorn $[identifier] används för att uppdatera specifika element i en matris som matchar ett visst villkor. Den här operatorn är användbar när du behöver uppdatera flera element i en matris baserat på vissa villkor. Det möjliggör mer detaljerade uppdateringar i dokument, vilket gör det till ett kraftfullt verktyg för att hantera komplexa datastrukturer.
Syntax
{
<update operator>: {
<array field>.$[<identifier>]: <value>
}
},
{
arrayFilters: [
{ <identifier>.<field>: <condition> }
]
}
Parameterar
| Parameter | Description |
|---|---|
<update operator> |
Uppdateringsoperatorn som ska tillämpas (till exempel $set, $inc, osv.). |
<array field> |
Fältet som innehåller matrisen som ska uppdateras. |
<identifier> |
En platshållare som används i arrayFilters för att matcha specifika element i matrisen. |
<value> |
Värdet som ska anges eller uppdateras. |
arrayFilters |
En matris med filtervillkor för att identifiera vilka element som ska uppdateras. |
<field> |
Det specifika fältet i matriselement som ska kontrolleras. |
<condition> |
Villkoret som matriselement måste uppfylla för att uppdateras. |
Examples
Överväg det här exempeldokumentet från butiksamlingen.
{
"_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": 25
},
{
"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
}
]
},
{
"eventName": "Major Deal Days",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 3,
"Day": 25
},
"endDate": {
"Year": 2024,
"Month": 4,
"Day": 2
}
},
"discounts": [
{
"categoryName": "Office Accessories",
"discountPercentage": 9
},
{
"categoryName": "Desks",
"discountPercentage": 13
}
]
},
{
"eventName": "Blowout Bonanza",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 6,
"Day": 23
},
"endDate": {
"Year": 2024,
"Month": 7,
"Day": 2
}
},
"discounts": [
{
"categoryName": "Office Chairs",
"discountPercentage": 24
},
{
"categoryName": "Desk Lamps",
"discountPercentage": 19
}
]
},
{
"eventName": "Super Saver Fiesta",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 9,
"Day": 21
},
"endDate": {
"Year": 2024,
"Month": 10,
"Day": 1
}
},
"discounts": [
{
"categoryName": "Desks",
"discountPercentage": 5
},
{
"categoryName": "Monitor Stands",
"discountPercentage": 10
}
]
}
],
"company": "Trey Research",
"city": "Lake Freeda",
"storeOpeningDate": "2024-12-30T22:55:25.779Z",
"lastUpdated": {
"t": 1729983325,
"i": 1
}
}
Exempel 1: Uppdatera rabattprocenten för den valda kategorin i den angivna kampanjhändelsen.
Den här frågan uppdaterar rabattprocenten för kategorin "Skrivbordslampor" genom att ändra de specifika elementen i kampanjhändelsematrisen där händelsenamnet är "Blowout Bonanza".
db.stores.updateOne(
{
_id: "905d1939-e03a-413e-a9c4-221f74055aac",
"promotionEvents.eventName": "Blowout Bonanza"
},
{
$set: {
"promotionEvents.$[event].discounts.$[discount].discountPercentage": 18
}
},
{
arrayFilters: [
{ "event.eventName": "Blowout Bonanza" },
{ "discount.categoryName": "Desk Lamps" }
]
}
)