No tienes acceso a esta clase

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

Curso de Base de Datos NoSQL

Curso de Base de Datos NoSQL

Adán Figueroa Jiménez

Adán Figueroa Jiménez

Operaciones avanzadas de reemplazo en MongoDB

10/17
Recursos

La operación de reemplazo en MongoDB permite sustituir el contenido completo de un documento. Esto es útil cuando se necesita modificar todo el documento en lugar de solo algunos campos. Aunque existen varias funciones para actualizar documentos, cada una tiene su propósito específico y utiliza los recursos del clúster de manera distinta.

¿Cómo se realiza la operación de reemplazo en MongoDB?

  • Utiliza replaceOne para reemplazar un documento completo.
  • El primer argumento es el filtro, usualmente el ObjectId.
  • El segundo argumento es el nuevo documento que reemplazará al existente.

Ejemplo:

db.customers.replaceOne(
  { _id: ObjectId("identificador_del_documento") },
  { username: "elitry" }
);

Este ejemplo elimina todos los campos excepto username y lo reemplaza con el valor especificado.

¿Qué hacer si no se encuentra un documento?

  • Utiliza la opción upsert: true.
  • Si el filtro no encuentra un documento, se crea uno nuevo con los valores proporcionados.

Ejemplo:

db.customers.replaceOne(
  { username: "xyz" },
  { username: "xyz", name: "Andrés", email: "[email protected]" },
  { upsert: true }
);

Este comando crea un nuevo documento si no encuentra uno existente con el username especificado.

¿Cómo usar Find and Modify para reemplazar documentos?

findAndModify no solo actualiza el documento, sino que también devuelve el documento antes o después de la modificación.

Ejemplo:

db.customers.findAndModify({
  query: { username: "lintco1" },
  update: { username: "lintc", name: "Catherine Davis" },
  new: true
});

Este comando reemplaza el documento y puede configurarse para mostrar el documento modificado.

¿Cuáles son las diferencias clave entre Update y Replace?

  • updateOne se usa para modificar ciertos campos del documento.
  • updateMany se usa para modificar múltiples documentos que cumplen con un filtro.
  • replaceOne reemplaza el documento completo.
  • findAndModify realiza dos operaciones: actualización y retorno del documento modificado.

¿Qué consideraciones tener al escalar?

  • Las operaciones atómicas como updateOne son preferibles para minimizar el uso de CPU y disco.
  • findAndModify puede ser menos eficiente debido a las operaciones adicionales que realiza.

Aportes 5

Preguntas 0

Ordenar por:

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

Me parece que esta clase no esta en el orden correcto, como puede ser la primera de esta seccion cuando no existe el contexto suficiente
Sí, es posible modificar datos en MongoDB solo indicando los campos que cambian utilizando la operación `update` o `updateOne`. Esta función permite especificar un filtro para seleccionar el documento y un objeto con los campos que deseas modificar. Por ejemplo: ```javascript db.customers.updateOne( { _id: ObjectId("tu_id") }, { $set: { username: "nuevo_username" } } ); ``` Esto actualizará solamente el campo `username`, dejando intactos los demás campos del documento. Recuerda que, si necesitas reemplazar todo el documento, usarías `replaceOne`.
```js [ { $match: /** * query: The query in MQL. */ { $and: [ { $expr: { $gte: [ { $year: { $dateFromString: { dateString: "$fechaNac" } } }, 1982 ] } }, { $expr: { $lte: [ { $year: { $dateFromString: { dateString: "$fechaNac" } } }, 1994 ] } } ] } }, { $addFields: /** * newField: The new field name. * expression: The new field expression. */ { generation: "millenials" } } ] ```
![](https://static.platzi.com/media/user_upload/image-306eac35-f9de-4b59-ba0c-b2d4cc678e9e.jpg)Ahora todos los Documentos que tengan "@yahoo.com" pertenecen a un grupo el cual se llama "Proveedor de correo". Primero se filtraron para su búsqueda, y luego se agregó este nuevo campo.
Hola, aqui mi solución para el reto de esta clase, actualice todos los usuarios a "26" que tuvieran de fecha de nacimiento el 1998-06-07 :) ![](https://static.platzi.com/media/user_upload/image-45469bad-3e24-4011-bc37-65122effdf70.jpg)