Consultas y operaciones básicas en MongoDB (CRUD)
Artículo básico de MongoDB. Operaciones cotidianas de inserción, búsqueda, actualización y borrado de documentos. Consideraciones y tips.
Recomendaciones
Antes de empezar a estudiar consultas y operaciones básicas en MongoDB, se recomienda contar con algunos conocimientos previos antes de leer este artículo, por lo cual, dejo la invitación a revisar los siguientes enlaces de apoyo opcionales:
Operaciones básicas de manipulación
Como se mencionó en artículos anteriores, MQL (MongoDB Query Language) nativamente ya contiene múltiples métodos definidos que nos ayudarán a manipular nuestra base de datos.
Aquí los métodos más utilizados para el manejo de colecciones y documentos:
- createCollection: Creación de colecciones.
- insertOne e insertMany: Inserción de documentos.
- find: Búsqueda de documentos.
- updateOne y updateMany: Actualización de documentos:
- deleteOne y deleteMany: Borrado de documentos:
A continuación algunos ejemplos básicos con estas funcionalidades.
1. createCollection
Para crear una nueva colección en nuestra base de datos, se usa el método createCollection
. Como argumento se le indica el nombre de la colección a crear.
db.createCollection("users");
Opcionalmente, createCollection
recibe un objeto de configuración en donde se pueden agregar ciertas reglas de negocio y validaciones a nuestra colección, como por ejemplo validaciones y restricciones de nuestro modelo.
db.createCollection("users", {
validator: {
$jsonSchema: {
bsonType: "object",
required: ["name", "email", "age", "created_at", "description", "active"],
properties: {
name: {
bsonType: "string",
description: "Name of the user"
},
email: {
bsonType: "string",
description: "Email of the user"
},
age: {
bsonType: "int",
minimum: 1,
maximum: 100,
description: "Age of the user"
},
create_at: {
bsonType: "date",
description: "Date related to the user"
},
description: {
bsonType: "string",
description: "Description of the user"
},
active: {
bsonType: "bool",
description: "Indicates whether the user is active or not"
}
}
}
}
});
2. insertOne e insertMany
Para insertar un documento a nuestra colección, se usa el método insertOne
. Como argumento se le indica la estructura a guardar.
db.users.insertOne({
name: "Diego",
email: "dcortes@example.com",
age: 25,
created_at: new Date(),
description: "Descripción del usuario",
active: true
});
Para insertar múltiples documentos a nuestra colección, se usa el método insertMany
. Como argumento se le entrega un array de estructuras a guardar.
db.users.insertMany([
{
name: "Franco",
email: "franco@example.com",
age: 20,
created_at: new Date(),
description: "Descripción del usuario",
active: true
},
{
name: "Juan",
email: "juan@example.com",
age: 40,
created_at: new Date(),
description: "Descripción del usuario",
active: true
}
]);
ObjectId
Al insertar cualquier documento en una colección, mongoDB generará un campo único. Este campo tiene como llave el nombre de “_id” y es del tipo de dato ObjectId. Este campo tiene el propósito de indexación automática en búsquedas y de diferenciar de forma predeterminada cada documento.
{
"_id" : ObjectId("65c55b7bf7c3603a6a6a1351"),
"name" : "Diego",
"email" : "dcortes@example.com",
"age" : NumberInt(25),
"created_at" : ISODate("2024-02-08T22:53:47.238+0000"),
"description" : "Descripción del usuario",
"active" : true
}
3. find
Para buscar documentos en una base de datos MongoDB, usamos el método find
. Este método es muy versátil y se adapta a diferentes tipos de búsquedas y filtros. Su respuesta varía según los operadores o argumentos que le entreguemos.
Por ejemplo, para listar todos los documentos dentro de nuestra colección users
, simplemente utilizamos find
con un objeto vacío como argumento:
db.users.find({});
Ahora, supongamos que deseas buscar todos los usuarios cuyo nombre sea “Diego” y cuya edad sea igual a 25. El código sería así:
db.users.find({age: 25});
Operadores en MongoDB
MongoDB Query Language, funciona de manera similar a los lenguajes de programación al tener operadores de comparación y elementos lógicos. Estos operadores son fundamentales para aplicar reglas de negocio en nuestras consultas y para realizar diversas operaciones con los datos almacenados en nuestra base de datos. MongoDB organiza sus operadores en tres grandes grupos:
- Operadores de comparación.
- Operadores de elementos.
- Operadores lógicos.
Los operadores en MongoDB empiezan con el signo $
y son pasados en el valor del campo mediante un objeto.
Operadores de comparación
Los operadores de comparación en MongoDB nos permiten comparar valores dentro de nuestros documentos utilizando condiciones comunes como igualdad, desigualdad, mayor que, entre otros. Estos operadores nos ayudan a evaluar las condiciones específicas que queremos aplicar a nuestros datos para filtrar y encontrar los documentos deseados en nuestra base de datos.
A continuación los operadores de comparación más utilizados:
- $eq (Igual que): Se utiliza para encontrar documentos con un campo que sea igual a un valor específico.
db.users.find({ age: { $eq: 25 } })
- $ne (Distinto de): Encuentra documentos donde un campo sea distinto de un valor específico.
db.users.find({ age: { $ne: 25 } })
- $gt (Valores mayores que): Encuentra documentos donde un campo sea mayor que un valor específico.
db.users.find({ age: { $gt: 25 } })
- $gte (Valores mayores o iguales que): Encuentra documentos donde un campo sea mayor o igual a un valor específico.
db.users.find({ age: { $gte: 25 } })
- $lt (Valores menores que): Encuentra documentos donde un campo sea menor que un valor específico.
db.users.find({ age: { $lt: 25 } })
- $lte (Valores menores o iguales que): Encuentra documentos donde un campo sea menor o igual a un valor específico.
db.users.find({ age: { $lte: 25 } })
- $in (Valores que se encuentran en un array de elementos): Encuentra documentos donde un campo coincida con cualquier valor en un array especificado.
db.users.find({ age: { $in: [25, 30, 35] } })
- $nin (Valores que NO se encuentran en un array de elementos): Encuentra documentos donde un campo no coincida con ningún valor en un array especificado.
db.users.find({ age: { $nin: [25, 30, 35] } })
Operadores de elementos
Los operadores de elementos en MongoDB son útiles para verificar la existencia de campos y para comprobar sus tipos de datos. Aquí están los operadores de elementos admitidos:
- $exists: Este operador comprueba si un campo existe en los documentos de la colección.
db.users.find({ age: { $exists: true } })
- $type: Este operador comprueba el tipo de dato de un campo en los documentos de la colección.
db.users.find({ name: { $type: "string" } })
Operadores lógicos
Los operadores lógicos nos permiten realizar filtrados considerando condiciones lógicas como el “OR” y el “AND”. Estos operadores son fundamentales para construir consultas más complejas y precisas en MongoDB.
- $or (O): Filtra documento que cumpla alguna de las condiciones descrita en un array de elementos.
db.users.find({$or: [{ name: "Diego" }, {name: "Franco"}]});
- $and (Y): Filtra documentos que cumplan todas las condiciones descritas en un array de elementos.
db.users.find({$and: [{ name: "Diego" }, { age: { $gte: 25 } }]});
4. updateOne y updateMany
Para actualizar un documento de nuestra colección, se usa el método updateOne
. Como argumento se le indica el filtro de búsqueda más los elementos a actualizar con el operador $set
. El operador $set
actualiza un campo existente o agrega uno nuevo en caso de que el campo no exista.
🤓 Una práctica muy utilizada es utilizar el método updateOne
en conjunto del “_id” como criterio de búsqueda.
db.users.updateOne(
{_id:ObjectId("62c0946602d55365f6a8b737")}, // Id of user
{$set: { email: "dcortes@update.com" }}
);
Para actualizar múltiples documentos de nuestra colección, se usa el método updateMany
. Como argumento se le indica el filtro de búsqueda más los elementos a actualizar con el operador $set
. A diferencia del métododo updateOne
, este método actualiza todas las coincidencias.
db.users.updateMany(
{},
{$set: { email: "all@update.com" }}
);
En el caso que necesitemos eliminar una propiedad existente, lo podemos hacer mediante el operador $unset
.
db.users.updateOne(
{_id:ObjectId("62c0946602d55365f6a8b737")}, // Id of user
{$unset: { "email": "" }}
);
5. deleteOne y deleteMany
Para eliminar un documento de nuestra colección, se usa el método deleteOne
. Como argumento se le indica el filtro de búsqueda. Este método solo eliminará la primera coincidencia.
db.users.deleteOne({_id: ObjectId("62c0957402d55365f6a8b739")});
Para eliminar múltiples documentos de nuestra colección, se usa el método deleteMany
. Como argumento se le indica el filtro de búsqueda. Este método únicamente eliminará todos los documentos que se encuentren en la coincidencia.
db.users.deleteMany({email: "all@update.com"});
Código fuente
Gracias por haber llegado hasta aquí, si encuentras esto útil, no olvides aplaudir 👏 . Suscríbete para obtener más contenido 🔔.
Si necesita ayuda adicional, comunícate conmigo 🤠.
Muchas gracias por leer, agradezco su tiempo.