Definición
$pushEl operador agrega un valor específico a una
$pushmatriz.
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 tiene la $push 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 no está presente en el documento a actualizar, agrega el campo de matriz con el valor como su$push elemento.
Si el campo no es un arreglo, la operación falla.
Si el valor es una matriz, agrega toda$push la matriz como un solo elemento. Para agregar cada elemento del valor por separado, use el $each modificador $push con. Para ver un ejemplo, consulte Agregar varios valores a una matriz. Para ver una lista de $push los modificadores disponibles para, consulte Modificadores.
A partir de MongoDB 5.0, mongodya no genera un error cuando se utiliza un operador de actualización como$pushcon una expresión de operando vacía ( { } ). Una actualización vacía no produce cambios y no se crea ninguna entrada en el oplog (lo que significa que la operación no tiene efecto).
Modifiers
Puedes usar el operador con los siguientes $push 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 tiene la $push forma:
{ $push: { <field1>: { <modifier1>: <value1>, ... }, ... } }
El procesamiento de la operación con modificadores se produce en el siguiente orden, independientemente del orden en que aparezcan los $push 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 para $push agregar "Classic" al genres array 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 para $push agregar "Acclaimed" al genres array en todos los documentos de películas coincidentes:
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
Utilice $push con el modificador para agregar varios valores al campo de $each matriz.
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 el operador $push con múltiples 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 $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 } ] }