Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El operador de actualización de matriz $[identifier] se usa para actualizar elementos específicos de una matriz que coincida con una condición determinada. Este operador es útil cuando es necesario actualizar varios elementos dentro de una matriz en función de determinados criterios. Permite actualizaciones más pormenorizadas dentro de los documentos, por lo que es una herramienta eficaz para administrar estructuras de datos complejas.
Syntax
{
<update operator>: {
<array field>.$[<identifier>]: <value>
}
},
{
arrayFilters: [
{ <identifier>.<field>: <condition> }
]
}
Parámetros
| Parámetro | Description |
|---|---|
<update operator> |
Operador de actualización que se va a aplicar (por ejemplo, $set, $inc, etc.). |
<array field> |
Campo que contiene la matriz que se va a actualizar. |
<identifier> |
Marcador de posición usado en arrayFilters para buscar coincidencias con elementos específicos de la matriz. |
<value> |
Valor que se va a establecer o actualizar. |
arrayFilters |
Matriz de condiciones de filtro para identificar qué elementos se van a actualizar. |
<field> |
Campo específico dentro de los elementos de matriz que se van a comprobar. |
<condition> |
Condición que deben cumplir los elementos de matriz para actualizarse. |
Examples
Considere este documento de ejemplo de la colección de tiendas.
{
"_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
}
}
Ejemplo 1: Actualice el porcentaje de descuento de la categoría elegida en el evento de promoción especificado.
Esta consulta actualiza el porcentaje de descuento de la categoría "Lámparas de escritorio" modificando los elementos específicos de la matriz de eventos de promoción donde el nombre del evento es "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" }
]
}
)