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:

    1. Condición{age: {$gt: 18}}

    2. 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 resultados

3. Seleccionar base de datos

use nombredatabase

4. Actualizar documentos (update)

db.getCollection('usuarios').update(
    { "rides": { $eq: 0 } },               // Filtro
    { $set: { "status": "fault" } },       // Cambios
    { multi: true }                        // Actualizar varios
)
  • $set añ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, 1 o "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" } } }
])
  • $match filtra datos.

  • $group agrupa 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?