Docs Menu
Docs Home
/ /
Arreglos

$push (operador de actualización)

$push

El operador $push añade un valor especificado a un arreglo.

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.

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.

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").

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 $each.

Ordena los elementos del arreglo. Requiere el uso del modificador $each.

Especifica la ubicación en el arreglo en la que insertar los nuevos elementos. Requiere el uso del modificador $each. Sin el $position modificador, el $push agrega los elementos al final del arreglo.

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:

  1. Actualiza el arreglo para añadir elementos en la posición correcta.

  2. Aplica la ordenación, si está especificada.

  3. Divide el arreglo, si está especificado.

  4. Almacena el arreglo.

Crear la colección students:

db.students.insertOne( { _id: 1, scores: [ 44, 78, 38, 80 ] } )

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ñ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 ] }
]

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 ] } } }
)

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 $each para agregar múltiples documentos al arreglo quizzes,

  • el modificador $sort para ordenar todos los elementos del arreglo quizzes modificado por el campo score en orden descendente, y

  • el modificador $slice para conservar solo los primeros tres elementos ordenados del arreglo quizzes.

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 }
]
}

Tip

Volver

$pull

En esta página