Definición
$pushEl
$pushEl operador añade un valor especificado a una matriz.
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 fallará.
Si el valor es un arreglo, $push añade todo el arreglo como un único elemento. Para añadir cada elemento del valor por separado, utiliza el modificador $each con $push. Para un ejemplo, consulta Agregar un valor a arreglos en múltiples documentos. Para obtener 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
Crear la colección students:
db.students.insertOne( { _id: 1, scores: [ 44, 78, 38, 80 ] } )
Añadir un valor a un arreglo
El siguiente ejemplo agrega 89 al arreglo scores:
db.students.updateOne( { _id: 1 }, { $push: { scores: 89 } } )
Ejemplo de salida:
{ _id: 1, scores: [ 44, 78, 38, 80, 89 ] }
Añadir un valor a arreglos en múltiples documentos
Añada los siguientes documentos a la colección students:
db.students.insertMany( [ { _id: 2, scores: [ 45, 78, 38, 80, 89 ] } , { _id: 3, scores: [ 46, 78, 38, 80, 89 ] } , { _id: 4, scores: [ 47, 78, 38, 80, 89 ] } ] )
La siguiente operación $push agrega 95 al arreglo scores en cada documento:
db.students.updateMany( { }, { $push: { scores: 95 } } )
Para confirmar que cada arreglo scores incluye 95, ejecuta la siguiente operación:
db.students.find()
La operación devuelve los siguientes resultados:
[ { _id: 1, scores: [ 44, 78, 38, 80, 89, 95 ] }, { _id: 2, scores: [ 45, 78, 38, 80, 89, 95 ] }, { _id: 3, scores: [ 46, 78, 38, 80, 89, 95 ] }, { _id: 4, scores: [ 47, 78, 38, 80, 89, 95 ] } ]
Añadir múltiples valores a un arreglo
Utiliza $push con el modificador $each para añadir múltiples valores al campo de arreglo.
El siguiente ejemplo añade cada elemento de [ 90, 92, 85 ] al arreglo scores del documento donde el campo name es igual a joe:
db.students.updateOne( { name: "joe" }, { $push: { scores: { $each: [ 90, 92, 85 ] } } } )
$push Utilice el operador 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 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 } ] }