Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

$[] (operador de actualización)

$[]

El operador de posición total $[] indica que el operador de actualización debe modificar todos los elementos del campo de arreglo especificado.

El operador $[] tiene el siguiente formato:

{ <update operator>: { "<array>.$[]" : value } }

Uso en operaciones de actualización, por ejemplo. db.collection.updateOne() y db.collection.findAndModify(), para modificar todos los elementos del arreglo para el documento o los documentos que coincidan con la condición de la query. Por ejemplo:

db.collection.updateOne(
{ <query conditions> },
{ <update operator>: { "<array>.$[]" : value } }
)

Para ver un ejemplo, consulte Actualizar todos los elementos de un arreglo.

A partir de MongoDB 5.0, los operadores de actualización procesan los campos de documentos con nombres basados en cadenas en orden lexicográfico. Los campos con nombres numéricos se procesan en orden numérico. Consulta Comportamiento del operador de actualización para obtener más información.

Si una operación de inserción da como resultado una inserción, el query debe incluir una coincidencia exacta en el campo de arreglo para poder utilizar el $[] operador posicional en la instrucción de actualización.

Por ejemplo, la siguiente operación de inserción, que utiliza $[] en el documento de actualización, especifica una condición de coincidencia exacta en el campo del arreglo:

db.collection.updateOne(
{ myArray: [ 5, 8 ] },
{ $set: { "myArray.$[]": 10 } },
{ upsert: true }
)

Si no existe tal documento, la operación dará como resultado la inserción del siguiente documento:

{ "_id" : ObjectId(...), "myArray" : [ 10, 10 ] }

Si la operación de inserción no incluyó una coincidencia exacta y no se encontraron documentos coincidentes para actualizar, la operación de inserción generaría un error.

Por ejemplo, las siguientes operaciones generarían un error si no se encontraran documentos coincidentes para actualizar:

db.emptyCollection.updateOne(
{ },
{ $set: { "myArray.$[]": 10 } },
{ upsert: true }
)
db.emptyCollection.updateOne(
{ myArray: 5 },
{ $set: { "myArray.$[]": 10 } },
{ upsert: true }
)

El operador $[] puede utilizarse para queries que atraviesan más de un arreglo y arreglos anidados.

Para ver un ejemplo, consulte Actualizar matrices anidadas en conjunto con.$[<identifier>]

Crear la colección students:

db.students.insertMany( [
{ "_id" : 1, "grades" : [ 85, 82, 80 ] },
{ "_id" : 2, "grades" : [ 88, 90, 92 ] },
{ "_id" : 3, "grades" : [ 85, 100, 90 ] }
] )

Para incrementar todos los elementos del grades array en 10 para todos los documentos de la colección, utilice el operador $[] posicional:

db.students.updateMany(
{ },
{ $inc: { "grades.$[]": 10 } },
)

El $[] operador, que es posicional, actúa como un marcador de posición para todos los elementos del campo de matriz.

Después de la operación, la colección students contiene los siguientes documentos:

{ "_id" : 1, "grades" : [ 95, 92, 90 ] }
{ "_id" : 2, "grades" : [ 98, 100, 102 ] }
{ "_id" : 3, "grades" : [ 95, 110, 100 ] }

El $[] operador posicional facilita la actualización de matrices que contienen documentos incrustados. Para acceder a los campos de los documentos incrustados, utilice la notación de punto con el $[] operador.

db.collection.updateOne(
{ <query selector> },
{ <update operator>: { "array.$[].field" : value } }
)

Crear la colección students2:

db.students2.insertMany( [
{
"_id" : 1,
"grades" : [
{ "grade" : 80, "mean" : 75, "std" : 8 },
{ "grade" : 85, "mean" : 90, "std" : 6 },
{ "grade" : 85, "mean" : 85, "std" : 8 }
]
},
{
"_id" : 2,
"grades" : [
{ "grade" : 90, "mean" : 75, "std" : 8 },
{ "grade" : 87, "mean" : 90, "std" : 5 },
{ "grade" : 85, "mean" : 85, "std" : 6 }
]
}
] )

Para modificar el valor del std campo para todos los elementos del grades array, utilice el operador $[] posicional:

db.students2.updateMany(
{ },
{ $inc: { "grades.$[].std" : -2 } },
)

Después de la operación, la colección tiene los siguientes documentos:

{
"_id" : 1,
"grades" : [
{ "grade" : 80, "mean" : 75, "std" : 6 },
{ "grade" : 85, "mean" : 90, "std" : 4 },
{ "grade" : 85, "mean" : 85, "std" : 6 }
]
}
{
"_id" : 2,
"grades" : [
{ "grade" : 90, "mean" : 75, "std" : 6 },
{ "grade" : 87, "mean" : 90, "std" : 3 },
{ "grade" : 85, "mean" : 85, "std" : 4 }
]
}

Crear la colección results:

db.results.insertMany( [
{ "_id" : 1, "grades" : [ 85, 82, 80 ] },
{ "_id" : 2, "grades" : [ 88, 90, 92 ] },
{ "_id" : 3, "grades" : [ 85, 100, 90 ] }
] )

Para incrementar todos los elementos del grades array en 10 para todos los documentos excepto aquellos con el valor 100 en el grades array, utilice el operador $[] posicional:

db.results.updateMany(
{ "grades" : { $ne: 100 } },
{ $inc: { "grades.$[]": 10 } },
)

El $[] operador, que es posicional, actúa como un marcador de posición para todos los elementos del campo de matriz.

Después de la operación, la colección students contiene los siguientes documentos:

{ "_id" : 1, "grades" : [ 95, 92, 90 ] }
{ "_id" : 2, "grades" : [ 98, 100, 102 ] }
{ "_id" : 3, "grades" : [ 85, 100, 90 ] }

El operador posicional $[], junto con el filtro $[<identifier>], se puede utilizar el operador posicional para actualizar arreglos anidados.

Cree una colección students3 con los siguientes documentos:

db.students3.insertMany( [
{ "_id" : 1,
"grades" : [
{ type: "quiz", questions: [ 10, 8, 5 ] },
{ type: "quiz", questions: [ 8, 9, 6 ] },
{ type: "hw", questions: [ 5, 4, 3 ] },
{ type: "exam", questions: [ 25, 10, 23, 0 ] },
]
}
] )

Para actualizar todos los valores que sean mayores o iguales a 8 en el arreglo anidado grades.questions, independientemente de type:

db.students3.updateMany(
{},
{ $inc: { "grades.$[].questions.$[score]": 2 } },
{ arrayFilters: [ { "score": { $gte: 8 } } ] }
)

Los documentos actualizados se ven así:

{
_id: 1,
grades: [
{ type: 'quiz', questions: [ 12, 10, 5 ] },
{ type: 'quiz', questions: [ 10, 11, 6 ] },
{ type: 'hw', questions: [ 5, 4, 3 ] },
{ type: 'exam', questions: [ 27, 12, 25, 0 ] }
]
}

Para ver ejemplos que utilizan el $[] operador para actualizar matrices, consulte Actualizar elementos de matriz con operadores posicionales de MQL.