Actualización de Documentos en MongoDB con Operadores Básicos
Resumen
¿Cómo actualizar documentos en MongoDB usando Mongo Compass y código?
Actualizar documentos en MongoDB es una habilidad esencial para cualquier desarrollador. Puedes hacerlo a través de la interfaz de Mongo Compass o mediante código, cada uno con sus ventajas. Mongo Compass te permite realizar ediciones directas de forma visual, mientras que con código puedes automatizar y personalizar las actualizaciones de los documentos.
¿Cómo usar Mongo Compass para actualizar?
Interfaz gráfica:
En Mongo Compass, accede a tu base de datos en Mongo Atlas.
Selecciona tu colección (por ejemplo, Platzi Store).
Encuentra el producto que deseas editar.
Haz clic en editar, realiza los cambios necesarios y guarda.
Sin embargo, para sacar el máximo provecho de MongoDB, es esencial saber cómo realizar estas acciones mediante código.
¿Cómo actualizar documentos mediante código?
Para actualizar documentos en MongoDB utilizando código, necesitas seguir un conjunto de pasos que aseguran el éxito de la operación. Aquí veremos un enfoque basado en código para realizar estas actualizaciones:
¿Qué es UpdateDoc y cómo funciona?
UpdateDoc es una utilidad diseñada para manejar actualizaciones en uno o varios documentos mediante MongoDB. Antes de actualizar, es crucial poblar (o llenar) la base de datos.
// Código para insertar productos sin problemas de duplicidaddb.collection('products').insertMany([{"name":"Product1","price":1000},{"name":"Product2","price":2000}],{ordered:false});
Este código llena la base de datos con productos, asegurando que no hay duplicados.
¿Cómo utilizar UpdateOne?
UpdateOne te permite realizar cambios en un único documento especificado por un query. Aquí está el paso a paso:
Consulta: Primero, necesitas identificar el documento que deseas actualizar. Esto se hace mediante un ID único.
Actualización: Definir los cambios que quieres aplicar usando operadores como $set o $inc.
Este último incrementa el precio del producto encontrado en 100 unidades en la moneda que estés utilizando.
¿Cómo manejar los Object ID generados automáticamente?
Cuando un ObjectID es generado por MongoDB, no puedes simplemente buscarlo como un string. Debes utilizar la función ObjectId() para manipularlo correctamente.
// Uso correcto del ObjectIDdb.collection('products').updateOne({_id:ObjectId("exampleObjectId")},{$inc:{"price":100}});
Así, aseguras que el objeto es localizado y actualizado correctamente.
¿Cuáles son las mejores prácticas al usar operadores?
Los operadores como $set y $inc son esenciales en las actualizaciones en MongoDB:
$set: Crea o actualiza campos específicos dentro de un documento.
$inc: Ideal para incrementar valores numéricos, útil para stocks, precios, etc.
Consultar la documentación oficial de MongoDB te proporcionará una lista completa de operadores que puedes usar para dinámicas actualizaciones.
Al dominar estas técnicas, aumentas tu habilidad para manejar bases de datos no solo eficientemente, sino también de una forma adaptable a las necesidades cambiantes de tus aplicaciones. ¡Sigue explorando las posibilidades que MongoDB te ofrece y sigue aprendiendo!
para actualizar un documento debemos pasar un query con un identificador del documento y un objeto con operadores como $inc para incrementar propiedades numéricas o $set para setear una o mas propiedades, añadir una nueva etc.
Los operadores son símbolos especiales que ayudan a los compiladores a realizar tareas matemáticas o lógicas. MongoDB ofrece varios tipos de operadores para interactuar con la base de datos.
Aca una lista de los operators que se pueden usar:
$currentDate: Sets the field value to the current date
$inc: Increments the field value$rename: Renames the field
$set: Sets the value of a field
$unset: Removes the field from the document
$addToSet: Adds distinct elements to an array
$pop: Removes the first or last element of an array
$pull: Removes all elements from an array that match the query
$push: Adds an element to an array
Para quienes no asignaron id sino que utilizan el autogenerado por mongo, el update sería:
use("platzi_store")//ACTUALIZAR ATRIBUTOS con $setdb.products.updateOne(//query{_id:1},//change => operator{$set:{name:'basura',price:1,tags:['useless','small']//tambien puede añadir propiedades nuevas}})///INCREMENTO con $incdb.products.updateOne(//query{_id:1},//change => operator{$inc:{price:100}})//BUSCAR Y MODIFICAR UN OBJETO CON ID AUTOGENERADO POR MONGO CON ObjectId()db.products.updateOne(//query{_id:ObjectId("63d81a4a8e4fe2331cfbef8f")},//change => operator{$inc:{price:100}})db.products.find()// $set: "Sets the value of a field in a document."// $inc: "Increments the value of the field by the specified amount."// Objectld: "Function to find a doc with objlD"
<u>$Set:</u>
Es un operador básico que se encarga de modificar los atributos de los documentos en la base de datos.
<u>$inc:</u>
Es un operador básico de MongoDB, encargado de incrementar valores numéricos de los atributos de los documentos.
<u>ObjectId:</u>
Tipo de dato que representa un identificador único generado automáticamente para cada documento en MongoDB.
Listo, muy bueno:
db.products.updateOne({_id:2},{$set:{name:'change name 2'}})
Replace y Update
La principal diferencia entre replace y update en MongoDB es cómo se modifican los documentos en una colección:
*Replace: *
Reemplaza un documento completo por otro.
No se pueden usar operadores de actualización como $inc o $set.
Útil para reemplazar un documento completo con nuevos datos.
Update:
Modifica los campos específicos de un documento.
Se pueden usar operadores de actualización para modificar valores, agregar nuevos campos o eliminar campos existentes.
Útil para realizar cambios específicos en un documento.
use("platzi_store");db.products.updateOne(//query, using ObjectId function, because is a $oid generated from mongo{_id:ObjectId("64af6901faea58044b9fd37e")},//change => with operator: $set, $inc{$set:{name:"Charger ultra speed",types:['american','european','african'],// we can put new attributes},$inc:{price:100,// increment the numeric values, plus this value},});db.products.find();