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.
- Incrementa en 1 el campo
number_of_reviewsde un listado específico (busca uno por suid) - Añade el campo
destacado: truea un listado de tu elección - Elimina el campo
destacadodel listado anterior (usa$unset) - Actualiza TODOS los listados de CIUTAT VELLA añadiendo el campo
zona: "centro histórico" - Incrementa en 0.1 la calificación
review_scores_ratingde un listado específico
Pro:
- Renombra el campo
nameatituloen un listado de prueba (usa$rename) - Actualiza múltiples campos a la vez: incrementa
number_of_reviewsen 1 Y añade el campoverificado: trueal mismo listado (usa$sety$incjuntos) - Usa
$maxpara asegurar que la calificaciónreview_scores_ratingde un listado sea al menos 4.0 (si ya es mayor, no cambia)
This work is under a Attribution-NonCommercial-NoDerivatives 4.0 International license.
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
Support me on Ko-fi
Comments
There are no comments yet.