Apuntes completos de MongoDB
Relacionado: IDOR. Apuntes. Notas. Herramientas.
¿Qué es MongoDB?
-
El nombre viene de “humongous” (enorme), porque está diseñado para manejar grandes volúmenes de datos.
-
Es una base de datos NoSQL orientada a documentos, que almacena datos en formato BSON (JSON binario).
-
Se ejecuta como servicio, similar a MySQL.
-
Para iniciarlo:
-
mongod→ levanta el servidor de base de datos. -
mongo→ abre la consola interactiva del cliente para ejecutar comandos.
-
Herramientas
-
Robo 3T: Cliente gráfico para interactuar con MongoDB.
-
En Linux, para instalar paquetes comprimidos:
tar -zvfx archivo.tar.gz
Características importantes
-
En MongoDB, una colección puede contener documentos con estructuras diferentes.
-
Si un documento no tiene un campo presente en otros, Mongo lo considera como
undefined.
Operaciones básicas
1. Crear documentos
db.<colección>.insertOne(
{ <objeto JSON> }
)Ejemplo:
db.usuarios.insertOne({
nombre: "Juan",
edad: 25
});2. Consultar documentos (find)
-
La consulta (
query) tiene dos partes:-
Condición →
{age: {$gt: 18}} -
Proyección (qué campos mostrar) →
{name: 1, address: 1}
-
-
Ejemplo:
db.users.find(
{ age: { $gt: 18 } }, // Filtro
{ name: 1, address: 1 } // Proyección
).limit(5); // Limitar resultados3. Seleccionar base de datos
use nombredatabase4. Actualizar documentos (update)
db.getCollection('usuarios').update(
{ "rides": { $eq: 0 } }, // Filtro
{ $set: { "status": "fault" } }, // Cambios
{ multi: true } // Actualizar varios
)-
$setañade o modifica campos si se cumple la condición. -
Si no se usa
$set, Mongo reemplaza todo el documento.
5. Insertar con Write Concern y Ordered
db.collection.insert(
{ /* documento o array de documentos */ },
{
writeConcern: { w: 1, j: true, wtimeout: 5000 },
ordered: true
}
)-
w→ Confirma la escritura cuando se replica en el número de nodos indicado (0,1o"majority"). -
j→ Guarda en el journal (registro binario secuencial para recuperación en caso de fallo). -
wtimeout→ Tiempo máximo para esperar confirmación de escritura. -
MongoDB admite hasta 100 000 escrituras por operación.
6. Agregaciones (aggregate)
- Para filtrar, agrupar y calcular estadísticas.
db.orders.aggregate([
{ $match: { status: "A" } },
{ $group: { _id: "$cust_id", total: { $sum: "$amount" } } }
])-
$matchfiltra datos. -
$groupagrupa resultados y aplica operaciones como$sum,$avg,$max, etc.
7. Recorrer y actualizar con forEach
db.getCollection('usuarios').find({}).forEach((doc) => {
db.getCollection('usuarios').update(
{ _id: doc._id },
{ $set: { rides: NumberInt(doc.rides) } }
);
});- Útil para hacer conversiones o actualizaciones masivas.
Notas clave:
-
MongoDB no requiere esquema fijo (schema-less).
-
Los datos se guardan en colecciones (equivalente a tablas en SQL).
-
Las consultas se parecen a JSON, pero con operadores especiales (
$gt,$lt,$eq,$in, etc.). -
Es ideal para datos flexibles y grandes volúmenes con alta velocidad de lectura/escritura.
Si quieres, puedo prepararte un mapa visual con los comandos de MongoDB divididos en CRUD (Create, Read, Update, Delete) y agregaciones para que lo tengas como chuleta rápida.
¿Quieres que lo haga?