No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Actualizando varios documentos

14/30
Recursos

¿Cómo realizar actualizaciones en múltiples documentos en MongoDB?

Actualizar una gran cantidad de documentos en una base de datos es una tarea crucial que puede ser optimizada utilizando los métodos adecuados. MongoDB provee herramientas poderosas como updateMany para ejecutar actualizaciones a escala. Este artículo desglosa cómo se puede aplicar updateMany para actualizar documentos en función de condiciones específicas, asegurando eficiencia y precisión.

¿Qué es updateMany y cómo se usa?

El método updateMany en MongoDB permite realizar actualizaciones a varios documentos que cumplan con un determinado criterio de búsqueda. Este método es especialmente útil para modificar campos o añadir nuevos elementos en múltiples registros de una colección de manera simultánea.

Ejemplo de uso básico:

Supongamos que queremos incrementar la población en mil de todos los documentos donde la ciudad sea Cleveland:

db.zips.updateMany(
  { city: "Cleveland" },
  { $inc: { pop: 1000 } }
);

Este snippet incrementará el valor del campo pop en 1000 para todos los documentos en la colección zips donde la ciudad es Cleveland.

¿Cómo agregar o modificar atributos con set?

El operador $set sirve para modificar el valor de un atributo existente o para añadir uno nuevo si el atributo aún no se encuentra en el documento.

Ejemplo de agregar un atributo:

db.zips.updateMany(
  { city: "Cleveland" },
  { $set: { myAttribute: "hola" } }
);

En este ejemplo, un nuevo campo myAttribute con el valor "hola" será añadido a los documentos que cumplan con el criterio.

¿Cómo renombrar y eliminar atributos?

MongoDB también ofrece operaciones para renombrar y eliminar atributos de documentos. Esto es útil cuando queremos limpiar o organizar nuestros datos sin alterar el contenido real.

  • Renombrar un atributo:

    Utiliza $rename para cambiar el nombre de un campo sin alterar su contenido:

    db.zips.updateMany(
      { city: "Cleveland" },
      { $rename: { "myAttribute": "myData" } }
    );
    

    Aquí el campo myAttribute se renombra a myData.

  • Eliminar un atributo:

    Utiliza $unset para eliminar un campo por completo:

    db.zips.updateMany(
      { city: "Cleveland" },
      { $unset: { myData: "" } }
    );
    

    Este comando elimina el campo myData de los documentos que cumplan con el criterio.

¿Por qué utilizar updateMany y estos operadores?

El uso de updateMany junto con operadores como $set, $rename y $unset proporciona:

  • Eficiencia al aplicar cambios a múltiples documentos de manera simultánea, evitando actualizaciones individuales.
  • Consistencia en los datos al asegurar que todas las modificaciones se apliquen bajo las mismas condiciones y parámetros.
  • Flexibilidad para adaptar y organizar los datos a los requisitos cambiantes del sistema o negocio.

MongoDB, a través de updateMany, facilita la gestión masiva de datos, permitiendo a los desarrolladores mantener la integridad de la base de datos en procesos de cambios extensos. Te animamos a seguir explorando y utilizando estas operaciones en tu flujo de trabajo diario, impulsando así tus proyectos hacia mayores niveles de optimización y rendimiento. ¡El conocimiento es poder, sigue aprendiendo y innovando!

Aportes 11

Preguntas 6

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Listado de operadores de actualización:

  • $inc: Incrementa el valor de un atributo numérico en una cantidad específica.
    |
  • $mul: Multiplica el valor de un atributo numérico por un factor específico.
    |
  • $rename: Cambia el nombre de un atributo.
    |
  • $set: Asigna un valor específico a un atributo.
    |
  • $unset: Elimina un atributo de un documento.
    |
  • $min: Actualiza el valor de un atributo con el valor mínimo especificado, sólo si el valor actual es mayor que el valor especificado.
    |
  • $max: Actualiza el valor de un atributo con el valor máximo especificado, sólo si el valor actual es menor que el valor especificado.
    |
  • $currentDate: Establece el valor de un atributo como la fecha y hora actual.
    |
  • $addToSet: Añade un valor a un atributo de tipo conjunto (array), sólo si el valor no existe en el conjunto.
    |
  • $pop: Elimina el primer o último elemento de un atributo de tipo conjunto (array).
    |
  • $pull: Elimina un valor específico de un atributo de tipo conjunto (array).
    |
  • $push: Añade un valor a un atributo de tipo conjunto (array).
    |
  • $pullAll: Elimina varios valores específicos de un atributo de tipo conjunto (array).

Para comentar líneas de código en VS Code pueden utilizar el siguiente atajo

  1. Seleccionan las líneas a comentar
  2. Presionar Ctrl + K + C

Para descomentar las líneas

  1. Seleccionar las líneas a descomentar
  2. Presionar Ctrl + K + U

Más operadores:

  • $set: Permite agregar o modificar un atributo.
  • $rename: Podemos renombrar un atributo sin necesidad de meterme con los valores.
  • $unset: Eliminar algun atributo.

Para que no tengan que comentar las líneas de código que no van a usar en ese mismo momento, recuerden que, en visual studio code, pueden seleccionar varias líneas de código usando la tecla alt.

Primero, con su cursor hacen click y seleccionan el bloque de código que quieren ejecutar, luego, van hasta la parte de arriba, donde dice use("sample_training"), mantienen la tecla alt y seleccionan esa línea de código.

Luego pueden darle al botón de run, y mongodb ejecutará solo el código que ustedes seleccionaron.

link a la documentacion con los operadores de actualizacion

Para comentar o des-comentar varias líneas en VSCode como lo hace el profesor, utilizas: `Shift + ALT + A`
use("sample_training");

db.zips.updateMany(
  //query has two conditions, population $gt is greater than
  { city: "CLEVELAND", pop: { $gt: 50000 } },
  {
    $inc: {
      pop: 20,
    },
    $set: {
      //add new attribute
      my_description: "This state is bigger",
    },
  }
);

db.zips.updateMany(
  { city: "CLEVELAND", pop: { $gt: 50000 } },
  {
    $rename: {
      //rename this attribute
      my_description: "description",
    },
  }
);

db.zips.updateMany(
  { city: "CLEVELAND", pop: { $gt: 50000 } },
  {
    $unset: {
      // delete this attribute
      description: "",
    },
  }
);

db.zips.find({ city: "CLEVELAND", pop: { $gt: 50000 } });
Muy buena clase
Cambiaron el formato y no veo donde esta la base de datos para ensayar los codigos
En VS Code al hacer un find, solo nos muestra un numero de documentos. Como podemos verlos todos? hay alguna forma de paginar o solo nos va a mostrar una pequeña muestra? saludos

Querys de casos de uso de estos operadores

db.test2.updateMany({ age: { $gt: 18 }},{ $set: {adulto: true} })
db.libros.updateOne({_id :{ $eq: ObjectId ('64ed1a9946f812aa794d176b')}} , { $unset : { id:''}})

db.test2.updateOne({ _id: { $eq: ObjectId('64ed1a9946f812aa794d176b')}} , { $unset : { id:''}})

db.test2.updateOne( { $and: [{ age: { $lt: 18 }}, { name: { $exists: true }}]}, { $set: { adulto: false }})

db.test2.updateMany( { $and: [{ age: { $lt: 18 }}, { name: { $exists: true }}]}, { $set: { adulto: false }})

db.test2.updateOne(
  { _id: { $in: [ObjectId('64ed1cd746f812aa794d176f'), ObjectId('64ed1cb546f812aa794d176e')] } },
  { $set: { name: 'update in' } }
)


db.test2.updateMany(
  { _id: { $in: [ObjectId('64ed1cd746f812aa794d176f'), ObjectId('64ed1cb546f812aa794d176e')] } },
  { $set: { name: 'update in' } }
)

db.test2.updateOne( { $and: [{ adulto: { $ne: true }}, { full_name: { $eq: 'update in' }}]}, [{ $set: { ref: { $concat: ['$_id', '$age'] }}}])

// para incrementar valores de un campo $inc, si no existe el campo lo crea, pero si debe existir por el parametro de busquedad
db.products.updateOne(  {_id: 4 },  {    $inc: {      price: 50    }  }){    "_id": 4,    "name": "Prodcut 4",    "price": 450  }
ahora _id: 4 , el campo price quedaria en 500

// esta accion evita que se pare la insercion de los documentos, si alguno contiene error
db.products.insertMany([...] , {  ordered: false}))