Logo

Actualización de Documentos en MongoDB

updateOne, updateMany, $set, $inc y upsert — ejercicios 16, 18 y 20

Juan David Peña

Juan David Peña

5/10/2026 · 3 min read

Actualización de documentos en MongoDB

Estructura de las actualizaciones

Las actualizaciones en MongoDB requieren dos partes: un filtro (qué documento modificar) y un operador (qué cambiar).

db.coleccion.updateOne(
  { filtro },                    // qué documento buscar
  { $operador: { campo: valor } } // qué cambiar
)

Importante: Si el documento no existe y no usas upsert: true, el update simplemente no hace nada — retorna matchedCount: 0 sin lanzar error.


Ejercicio 16 — updateOne Simple

Actualizar el property_type del listing “Cozy Cabin Retreat” a “Entire home/apt”.

use('sample_airbnb');

db.listingsAndReviews.updateOne(
  { name: "Cozy Cabin Retreat" },
  { $set: { property_type: "Entire home/apt" } }
)

¿Qué aprendemos aquí?

  • $set asigna o actualiza un campo sin tocar el resto del documento
  • El filtro busca el documento por name
  • Si el documento no existe previamente, el resultado es matchedCount: 0, modifiedCount: 0

Resultado esperado

{
  acknowledged: true,
  matchedCount: 1,
  modifiedCount: 1
}

Error común — replaceOne vs updateOne

// MAL — reemplaza TODO el documento, pierdes los otros campos
db.listingsAndReviews.replaceOne(
  { name: "Cozy Cabin Retreat" },
  { property_type: "Entire home/apt" }
)

// BIEN — solo modifica el campo indicado
db.listingsAndReviews.updateOne(
  { name: "Cozy Cabin Retreat" },
  { $set: { property_type: "Entire home/apt" } }
)

Ejercicio 18 — updateMany con $inc

Incrementar number_of_reviews en 1 para todos los listings ubicados en Spain.

use('sample_airbnb');

db.listingsAndReviews.updateMany(
  { "address.country": "Spain" },
  { $inc: { number_of_reviews: 1 } }
)

¿Qué aprendemos aquí?

  • updateMany aplica el cambio a todos los documentos que coinciden con el filtro
  • $inc incrementa un valor numérico — para decrementar usa un valor negativo
  • El resultado muestra matchedCount y modifiedCount

Operadores de actualización más usados

OperadorFunciónEjemplo
$setAsigna un valor{ $set: { campo: "valor" } }
$unsetElimina un campo{ $unset: { campo: "" } }
$incIncrementa{ $inc: { campo: 1 } }
$mulMultiplica{ $mul: { campo: 1.10 } }
$pushAñade al array{ $push: { array: "valor" } }
$pullQuita del array{ $pull: { array: "valor" } }
$addToSetAñade sin duplicar{ $addToSet: { array: "valor" } }

Ejercicio 20 — updateOne con upsert: true

Intentar actualizar un listing que no existe. Si no existe, insertarlo con los datos proporcionados.

use('sample_airbnb');

db.listingsAndReviews.updateOne(
  { name: "Mansión de Prueba" },
  {
    $set: {
      name: "Mansión de Prueba",
      price: 1500.00,
      country: "United States"
    }
  },
  { upsert: true }
)

¿Qué aprendemos aquí?

  • upsert: true es el tercer parámetro, separado de los otros dos
  • Si el documento existe → lo actualiza
  • Si el documento no existe → lo inserta con los campos del $set
  • El resultado muestra upsertedCount: 1 cuando se inserta nuevo

Resultado cuando inserta nuevo

{
  acknowledged: true,
  matchedCount: 0,
  modifiedCount: 0,
  upsertedCount: 1,
  upsertedId: ObjectId('...')
}

Estructura completa con upsert

db.coleccion.updateOne(
  { filtro },           // primer parámetro — buscar
  { $set: { ... } },   // segundo parámetro — qué cambiar
  { upsert: true }     // tercer parámetro — opción
)