7. Actualizar documentos

Ahora aprenderás a modificar documentos existentes usando operadores de actualización.

Actualizar un documento

Para actualizar un solo documento usa updateOne:

db.listings.updateOne(
    { name: "Mi apartamento en Barcelona" },
    { $set: { price: "$80.00" } }
)

El primer parámetro es el filtro (qué documentos actualizar). El segundo es la actualización (qué cambiar).

Importante: siempre usa operadores como $set, $inc, etc. Si no lo haces, reemplazarás todo el documento.

Actualizar múltiples documentos

Para actualizar todos los documentos que coinciden con un filtro usa updateMany:

// Añade un campo a todos los listados de EXTRAMURS
db.listings.updateMany(
    { neighbourhood_group_cleansed: "EXTRAMURS" },
    { $set: { zona: "norte" } }
)

Reemplazar un documento

Para reemplazar completamente un documento usa replaceOne:

db.listings.replaceOne(
    { name: "Mi apartamento en Barcelona" },
    {
        name: "Mi apartamento renovado",
        neighbourhood_group_cleansed: "EIXAMPLE",
        room_type: "Entire home/apt",
        accommodates: 6,
        price: "$120.00"
    }
)

Esto elimina todos los campos antiguos y los reemplaza con los nuevos. Úsalo con cuidado.

Operadores de actualización

Los operadores más comunes:

$set: establece el valor de un campo

db.unicorns.updateOne(
    { name: 'Aurora' },
    { $set: { weight: 470 } }
)

$unset: elimina un campo del documento

db.unicorns.updateOne(
    { name: 'Aurora' },
    { $unset: { vampires: "" } }
)

$inc: incrementa (o decrementa) un valor numérico

// Incrementa vampiros en 2
db.unicorns.updateOne(
    { name: 'Aurora' },
    { $inc: { vampires: 2 } }
)

// Decrementa vampiros en 5
db.unicorns.updateOne(
    { name: 'Horny' },
    { $inc: { vampires: -5 } }
)

$min: actualiza solo si el nuevo valor es menor

db.scores.updateOne(
    { _id: 1 },
    { $min: { lowScore: 150 } }
)

$max: actualiza solo si el nuevo valor es mayor

db.scores.updateOne(
    { _id: 1 },
    { $max: { highScore: 1000 } }
)

$rename: renombra un campo

db.users.updateOne(
    { name: 'Ana' },
    { $rename: { 'name': 'fullName' } }
)

Operadores para arrays

$push: añade un elemento al final de un array

db.unicorns.updateOne(
    { name: 'Aurora' },
    { $push: { loves: 'sugar' } }
)

$pull: elimina todas las ocurrencias de un valor del array

db.unicorns.updateOne(
    { name: 'Aurora' },
    { $pull: { loves: 'carrot' } }
)

$addToSet: añade un elemento solo si no existe (sin duplicados)

db.unicorns.updateOne(
    { name: 'Aurora' },
    { $addToSet: { loves: 'apple' } }
)

Upsert

Un upsert actualiza un documento si existe, o lo inserta si no existe. Es muy útil para contadores o registros de eventos.

db.hits.updateOne(
    { page: 'unicorns' },
    { $inc: { hits: 1 } },
    { upsert: true }
)

La primera vez, como no existe el documento, lo crea con hits: 1. Las siguientes veces, incrementa el contador.

Actualizar múltiples documentos

Por defecto, updateOne solo actualiza el primer documento que encuentra. Para actualizar todos los que coinciden, usa updateMany:

// Vacuna a TODOS los unicornios
db.unicorns.updateMany(
    {},
    { $set: { vaccinated: true } }
)
Actividad 1

Nota importante: Como estamos trabajando con datos reales, practica primero con listados específicos antes de hacer cambios masivos.

  1. Incrementa en 1 el campo number_of_reviews de un listado específico (busca uno por su id)
  2. Añade el campo destacado: true a un listado de tu elección
  3. Elimina el campo destacado del listado anterior (usa $unset)
  4. Actualiza TODOS los listados de CIUTAT VELLA añadiendo el campo zona: "centro histórico"
  5. Incrementa en 0.1 la calificación review_scores_rating de un listado específico

Pro:

  1. Renombra el campo name a titulo en un listado de prueba (usa $rename)
  2. Actualiza múltiples campos a la vez: incrementa number_of_reviews en 1 Y añade el campo verificado: true al mismo listado (usa $set y $inc juntos)
  3. Usa $max para asegurar que la calificación review_scores_rating de un listado sea al menos 4.0 (si ya es mayor, no cambia)

Soluciones

This work is under a Attribution-NonCommercial-NoDerivatives 4.0 International license.

Desafíos de programación atemporales y multiparadigmáticos

Desafíos de programación atemporales y multiparadigmáticos

Te encuentras ante un librillo de actividades, divididas en 2 niveles de dificultad. Te enfrentarás a los casos más comunes que te puedes encontrar en pruebas técnicas o aprender conceptos elementales de programación.

Buy the book

Will you buy me a coffee?

Comments

There are no comments yet.

Visitors in real time

You are alone: 🐱