✏️ Actualizar documentos (Update)

Consultar documentos en MongoDB

✏️ Actualizar documentos (Update)

MongoDB permite modificar documentos mediante los métodos updateOne(), updateMany() y replaceOne(). A diferencia de SQL (UPDATE), aquí usamos operadores especiales como $set, $inc, $unset, etc.


🛠️ 1️⃣ Métodos principales

  • updateOne() → Actualiza el primer documento que coincida.
  • updateMany() → Actualiza todos los documentos que coincidan.
  • replaceOne() → Reemplaza un documento completo.

📝 2️⃣ Actualizar campos con $set

Actualizar un dato concreto sin modificar el resto:

db.usuarios.updateOne(
  { nombre: "Ana Torres" },
  { $set: { telefono: "600123123" } }
)

Actualizar varios campos a la vez:

db.usuarios.updateOne(
  { correo: "ana@correo.com" },
  { $set: { ciudad: "Valencia", activo: true } }
)

➕ 3️⃣ Incrementar valores con $inc

Aumentar la cantidad de un producto:

db.productos.updateOne(
  { nombre: "Teclado RGB" },
  { $inc: { stock: 5 } }
)

Reducir el precio en 10 unidades:

db.productos.updateOne(
  { nombre: "Monitor LG" },
  { $inc: { precio: -10 } }
)

❌ 4️⃣ Eliminar campos con $unset

Eliminar el campo "descuento" de un producto:

db.productos.updateOne(
  { nombre: "Altavoz Bluetooth" },
  { $unset: { descuento: "" } }
)

📦 5️⃣ Actualizar múltiples documentos (updateMany)

Ejemplo: activar todos los usuarios:

db.usuarios.updateMany(
  {},
  { $set: { activo: true } }
)

Aplicar un aumento general del 10% en precios:

db.productos.updateMany(
  {},
  { $mul: { precio: 1.10 } }
)

$mul multiplica el valor actual del campo.


🆕 6️⃣ Reemplazar un documento completo (replaceOne)

Reemplaza todo el documento excepto el _id:

db.usuarios.replaceOne(
  { correo: "ana@correo.com" },
  {
    nombre: "Ana Torres",
    ciudad: "Madrid",
    activo: true
  }
)

Advertencia: si olvidas incluir un campo, se pierde.


🛒 7️⃣ Ejemplo real: actualización típica de e-commerce

Reducir stock cuando se realiza una compra:

db.productos.updateOne(
  { sku: "PROD123" },
  { $inc: { stock: -1 } }
)

Marcar un producto como destacado:

db.productos.updateOne(
  { sku: "PROD123" },
  { $set: { destacado: true } }
)

🔧 8️⃣ upsert: actualizar o insertar si no existe

Si el documento NO existe, lo crea.

db.usuarios.updateOne(
  { correo: "nuevo@correo.com" },
  { $set: { nombre: "Nuevo Usuario", activo: true } },
  { upsert: true }
)

🧠 Resumen rápido

  • $set: modificar valores.
  • $inc: sumar o restar números.
  • $unset: eliminar campos.
  • updateOne / updateMany: actualizar uno o varios.
  • replaceOne: reemplazar documento entero.
  • upsert: si no existe, lo crea.

Publicar un comentario

0 Comentarios