Definición
$pushLa
$pushEl operador adjunta un valor especificado a un arreglo.
Compatibilidad
Puedes usar $push para implementaciones alojadas en los siguientes entornos:
MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube
MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB
MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.
Sintaxis
El operador $push tiene la forma:
{ $push: { <field1>: <value1>, ... } }
Para especificar un <field> en un documento incrustado o en un arreglo, utiliza notación de puntos.
Comportamiento
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 el campo está ausente en el documento que se va a actualizar, $push añade el campo de arreglo con el valor como su elemento.
Si el campo no es un arreglo, la operación falla.
Si el valor es un arreglo, $push anexará toda la matriz como un solo elemento. Para añadir cada elemento del valor por separado, usa el modificador $each con $push. Para ver un ejemplo, consulte Añadir múltiples valores a un arreglo. Para consultar una lista de modificadores disponibles para $push, consulta Modificadores.
A partir de MongoDB 5.0, mongod ya no genera un error cuando utiliza un operador de actualización como $push con una expresión de operando vacía ( { } ). Una actualización vacía no produce cambios y no genera ninguna entrada en el oplog (lo que significa que la operación es una “no-op").
Modifiers
Puedes utilizar el operador $push con los siguientes modificadores:
Modifier | Descripción |
|---|---|
Agrega múltiples valores al campo del arreglo. | |
Limita el número de elementos del arreglo. Requiere el uso del modificador | |
Ordena los elementos del arreglo. Requiere el uso del modificador | |
Cuando se utiliza con modificadores, el operador $push tiene esta forma:
{ $push: { <field1>: { <modifier1>: <value1>, ... }, ... } }
El procesamiento de la operación $push con modificadores se realiza en el siguiente orden, independientemente del orden en que aparezcan los modificadores:
Actualiza el arreglo para añadir elementos en la posición correcta.
Aplica la ordenación, si está especificada.
Divide el arreglo, si está especificado.
Almacena el arreglo.
Ejemplos
Los ejemplos de esta página utilizan datos del conjunto de datos de muestra sample_mflix. Para obtener más información sobre cómo cargar este conjunto de datos en la implementación autogestionada de MongoDB, consultar Cargar el conjunto de datos de muestra. Si se realizó alguna modificación en las bases de datos de muestra, es posible que se deban descartar y volver a crear las bases de datos para ejecutar los ejemplos de esta página.
Añadir un valor a un arreglo
El siguiente ejemplo utiliza el operador $push para agregar "Classic" al arreglo genres en el documento de película correspondiente:
db.movies.updateOne( { title: "The Dark Knight" }, { $push: { genres: "Classic" } } )
La operación devuelve el siguiente resultado:
{ acknowledged: true, insertedId: null, matchedCount: 1, modifiedCount: 1, upsertedCount: 0 }
Añadir un valor a arreglos en múltiples documentos
El siguiente ejemplo utiliza el operador $push para agregar "Acclaimed" al arreglo genres en todos los documentos de películas que cumplan con la condición:
db.movies.updateMany( { "imdb.rating": { $gt: 9 } }, { $push: { genres: "Acclaimed" } } )
La operación devuelve el siguiente resultado:
{ acknowledged: true, insertedId: null, matchedCount: '...', modifiedCount: '...', upsertedCount: 0 }
Añadir múltiples valores a un arreglo
Utiliza $push con el modificador $each para añadir múltiples valores al campo de arreglo.
db.movies.updateOne( { title: "The Dark Knight" }, { $push: { genres: { $each: [ "Modern Classic", "Award-Winning" ] } } } )
La operación devuelve el siguiente resultado:
{ acknowledged: true, insertedId: null, matchedCount: 1, modifiedCount: 1, upsertedCount: 0 }
Usa $push operador con varios modificadores
Añada el siguiente documento a la colección students:
db.students.insertOne( { "_id" : 5, "quizzes" : [ { "wk": 1, "score" : 10 }, { "wk": 2, "score" : 8 }, { "wk": 3, "score" : 5 }, { "wk": 4, "score" : 6 } ] } )
La siguiente operación de $push utiliza:
el modificador
$eachpara agregar múltiples documentos al arregloquizzes,el modificador
$sortpara ordenar todos los elementos del arregloquizzesmodificado por el camposcoreen orden descendente, yel modificador
$slicepara conservar solo los primeros tres elementos ordenados del arregloquizzes.
db.students.updateOne( { _id: 5 }, { $push: { quizzes: { $each: [ { wk: 5, score: 8 }, { wk: 6, score: 7 }, { wk: 7, score: 6 } ], $sort: { score: -1 }, $slice: 3 } } } )
Después de la operación, solo los tres cuestionarios con mayor puntuación están en el arreglo:
{ "_id" : 5, "quizzes" : [ { "wk" : 1, "score" : 10 }, { "wk" : 2, "score" : 8 }, { "wk" : 5, "score" : 8 } ] }