MongoDB es una base de datos NoSQL orientada a documentos que utiliza un formato BSON (Binary JSON) para almacenar datos. Es altamente escalable y flexible.
Instalación de MongoDB
Instalación en Windows
Descarga el instalador de la página oficial y sigue las instrucciones.
Estructura de datos
Documentos y Colecciones
- Un documento es un registro individual, similar a una fila en una base de datos relacional.
- Una colección es un conjunto de documentos, comparable a una tabla.
{
"_id": ObjectId("607d1c4e79b1f8d75e7ecf0b"),
"nombre": "Luis",
"edad": 30,
"ciudad": "Madrid"
}
Conexión a MongoDB
Conectar a la base de datos
Utiliza el shell de MongoDB para conectarte a una base de datos:
mongo --host localhost --port 27017
Conexión desde Node.js
Instala el driver de MongoDB:
npm install mongodb
Conéctate desde tu aplicación:
const { MongoClient } = require('mongodb');
const url = 'mongodb://localhost:27017';
const client = new MongoClient(url);
async function run() {
try {
await client.connect();
console.log("Conectado correctamente a la base de datos");
} finally {
await client.close();
}
}
run().catch(console.dir);
Operaciones CRUD
Insertar un Documento
const resultado = await collection.insertOne({ nombre: "Luis", edad: 30 });
console.log(`Nuevo documento creado con el id: ${resultado.insertedId}`);
Insertar Múltiples Documentos
const resultado = await collection.insertMany([
{ nombre: "Ana", edad: 25 },
{ nombre: "Pedro", edad: 35 }
]);
console.log(`${resultado.insertedCount} documentos fueron insertados`);
Encontrar un Documento
const documento = await collection.findOne({ nombre: "Luis" });
console.log(documento);
Encontrar Múltiples Documentos
const documentos = await collection.find({ edad: { $gt: 30 } }).toArray();
console.log(documentos);
Actualizar un Documento
const resultado = await collection.updateOne(
{ nombre: "Luis" },
{ $set: { edad: 31 } }
);
console.log(`${resultado.modifiedCount} documento(s) actualizado(s)`);
Actualizar Múltiples Documentos
const resultado = await collection.updateMany(
{ edad: { $lt: 30 } },
{ $set: { estado: "joven" } }
);
console.log(`${resultado.modifiedCount} documento(s) actualizado(s)`);
Eliminar un Documento
const resultado = await collection.deleteOne({ nombre: "Luis" });
console.log(`${resultado.deletedCount} documento(s) eliminado(s)`);
Eliminar Múltiples Documentos
const resultado = await collection.deleteMany({ edad: { $lt: 30 } });
console.log(`${resultado.deletedCount} documento(s) eliminado(s)`);
Operaciones avanzadas
Agregaciones
MongoDB permite realizar operaciones de agregación complejas:
const resultados = await collection.aggregate([
{ $match: { edad: { $gte: 25 } } },
{ $group: { _id: "$ciudad", promedioEdad: { $avg: "$edad" } } }
]).toArray();
console.log(resultados);
Índices
Los índices mejoran el rendimiento de las consultas:
await collection.createIndex({ nombre: 1 });
Listar Índices
const indices = await collection.indexes();
console.log(indices);
Filtrado y Búsqueda
Operadores de Consulta Comunes
Operador | Descripción | Ejemplo |
---|---|---|
$eq | Igual a | { edad: { $eq: 30 }} |
$gt | Mayor que | { edad: { $gt: 25 }} |
$gte | Mayor o igual que | { edad: { $gte: 25 }} |
$lt | Menor que | { edad: { $lt: 25 }} |
$lte | Menor o igual que | { edad: { $lte: 25 }} |
$ne | No igual a | { edad: { $ne: 30 }} |
$in | En un conjunto de valores | { ciudad: { $in: ["Madrid", "Barcelona"] }} |
$or | O | { $or: [{ edad: 25 }, { ciudad: "Madrid" }] } |
$and | Y | { $and: [{ edad: { $gte: 25 } }, { ciudad: "Madrid" }] } |
Seguridad y Autenticación
Autenticación de Usuarios
Puedes crear usuarios y asignar roles:
db.createUser({
user: "usuario",
pwd: "contraseña",
roles: [{ role: "readWrite", db: "miBaseDeDatos" }]
});
Conexión con Autenticación
const url = 'mongodb://usuario:contraseña@localhost:27017/miBaseDeDatos';