Bases de datos no relacionales

MongoDB es una base de datos NoSQL que almacena datos en documentos JSON (BSON internamente). A diferencia de SQL, que utiliza tablas y filas, MongoDB utiliza colecciones y documentos. Aquí te explico cómo manejar las operaciones básicas en MongoDB con ejemplos.

Comprobar si MongoDB está instalado

  1. Abrir la Terminal: Puedes hacerlo presionando Ctrl + Alt + T o buscándola en el menú de aplicaciones.
  2. Verificar la versión de MongoDB: Ejecuta el siguiente comando para ver si MongoDB está instalado y obtener su versión:mongo --version Si MongoDB está instalado, verás la versión instalada. Si no está instalado, recibirás un mensaje de error indicando que el comando no se encontró.
  3. Verificar el estado del servicio MongoDB: Puedes comprobar si el servicio MongoDB está corriendo con el siguiente comando:sudo systemctl status mongod Esto te mostrará el estado del servicio MongoDB. Si está activo, verás algo como “active (running)”.

Instalar MongoDB en Linux

Si no tienes MongoDB instalado, puedes seguir estos pasos para instalarlo:

  1. Importar la clave pública de MongoDB:wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
  2. Crear el archivo de lista para MongoDB:echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
  3. Actualizar la lista de paquetes:sudo apt-get update
  4. Instalar MongoDB:sudo apt-get install -y mongodb-org
  5. Iniciar el servicio MongoDB:sudo systemctl start mongod
  6. Habilitar MongoDB para que se inicie al arrancar el sistema:sudo systemctl enable mongod

Verificar la instalación

Después de la instalación, puedes verificar que MongoDB está corriendo correctamente con los mismos comandos que mencioné anteriormente para comprobar el estado del servicio y la versión.

Definicion mongo

En MongoDB, los conceptos de filas y campos de una tabla en SQL se traducen de la siguiente manera:

  • Tabla (SQL): En MongoDB, una tabla se llama colección.
  • Fila (SQL): Cada fila en una tabla SQL es equivalente a un documento en una colección de MongoDB.
  • Campo (SQL): Los campos en una fila de SQL se corresponden con los campos dentro de un documento en MongoDB.

Aquí tienes un ejemplo para ilustrarlo:

SQL

CREATE TABLE usuarios (
    id INT PRIMARY KEY,
    nombre VARCHAR(100),
    email VARCHAR(100)
);

INSERT INTO usuarios (id, nombre, email) VALUES (1, 'Juan', 'juan@example.com');

MongoDB

JSON

{
    "_id": 1,
    "nombre": "Juan",
    "email": "juan@example.com"
}

En este ejemplo, la tabla usuarios en SQL se convierte en una colección en MongoDB, y cada fila de la tabla se convierte en un documento JSON dentro de esa colección

Empezando a utilizar mongosh

Crear una Base de Datos

En MongoDB, una base de datos se crea automáticamente cuando insertas datos en ella. Por ejemplo:

use miNuevaBaseDeDatos
db.miColeccion.insertOne({nombre: "ejemplo"})

Esto crea una base de datos llamada miNuevaBaseDeDatos y una colección llamada miColeccion con un documento.

Crear Usuarios

Para crear un usuario, necesitas usar el método createUser. Aquí tienes un ejemplo:

use admin
db.createUser({
  user: "miUsuario",
  pwd: "miContraseñaSegura",
  roles: [{ role: "readWrite", db: "miNuevaBaseDeDatos" }]
})

Este comando crea un usuario llamado miUsuario con la contraseña miContraseñaSegura y le otorga el rol readWrite en la base de datos miNuevaBaseDeDatos12.

Crear Roles

Puedes crear roles personalizados usando el método createRole. Aquí tienes un ejemplo:

use miNuevaBaseDeDatos
db.createRole({
  role: "miNuevoRol",
  privileges: [
    { resource: { db: "miNuevaBaseDeDatos", collection: "" }, actions: ["find", "insert"] }
  ],
  roles: []
})

Este comando crea un rol llamado miNuevoRol que permite las acciones find e insert en todas las colecciones de miNuevaBaseDeDatos34.

Asignar Roles a Usuarios

Para asignar un rol a un usuario existente, puedes usar el método grantRolesToUser:

use admin
db.grantRolesToUser("miUsuario", [{ role: "miNuevoRol", db: "miNuevaBaseDeDatos" }])

Esto asigna el rol miNuevoRol al usuario miUsuario en la base de datos miNuevaBaseDeDatos

Operaciones Básicas en MongoDB

  1. Insertar Documentos: db.usuarios.insertOne({ nombre: "Juan", edad: 30 }); db.usuarios.insertMany([ { nombre: "Ana", edad: 25 }, { nombre: "Luis", edad: 28 } ]);
  2. Consultar Documentos: db.usuarios.find({ nombre: "Juan" }); db.usuarios.find({ edad: { $gt: 25 } });
  3. Actualizar Documentos: db.usuarios.updateOne( { nombre: "Juan" }, { $set: { edad: 31 } } ); db.usuarios.updateMany( { edad: { $lt: 30 } }, { $inc: { edad: 1 } } );
  4. Eliminar Documentos: db.usuarios.deleteOne({ nombre: "Juan" }); db.usuarios.deleteMany({ edad: { $lt: 30 } });

Consultas y Filtrado

  1. Filtrar con Condiciones: db.usuarios.find({ edad: { $gte: 25, $lte: 30 } });
  2. Ordenar Resultados: db.usuarios.find().sort({ edad: -1 }); // Orden descendente
  3. Proyección de Campos: db.usuarios.find({}, { nombre: 1, _id: 0 }); // Solo muestra el campo nombre

Agregaciones

  1. Contar Documentos: db.usuarios.countDocuments({ edad: { $gt: 25 } });
  2. Agrupar y Contar: db.usuarios.aggregate([ { $group: { _id: "$edad", total: { $sum: 1 } } } ]);
  3. Filtrar y Agrupar: db.usuarios.aggregate([ { $match: { edad: { $gt: 25 } } }, { $group: { _id: "$edad", total: { $sum: 1 } } } ]);

Índices

  1. Crear Índice: db.usuarios.createIndex({ nombre: 1 });
  2. Ver Índices: tdb.usuarios.getIndexes();

Relaciones entre Documentos

  1. Referencias (Relaciones): db.pedidos.insertOne({ usuario_id: ObjectId("60c72b2f9b1d8b3f4c8b4567"), producto: "Laptop", cantidad: 1 });
  2. Consultas con Join (Agregación): db.usuarios.aggregate([ { $lookup: { from: "pedidos", localField: "_id", foreignField: "usuario_id", as: "pedidos" } } ]);

Funciones de Cadena

  1. Concatenar Cadenas: db.usuarios.aggregate([ { $project: { nombre_completo: { $concat: ["$nombre", " ", "$apellido"] } } } ]);
  2. Subcadena: usuarios.aggregate([ { $project: { subcadena: { $substr: ["$nombre", 0, 3] } } } ]);

Funciones de Fecha y Hora

  1. Fecha Actual: db.usuarios.insertOne({ nombre: "Carlos", creado_en: new Date() });
  2. Diferencia de Fechas: db.usuarios.aggregate([ { $project: { diferencia_dias: { $divide: [ { $subtract: [new Date(), "$creado_en"] }, 1000 * 60 * 60 * 24 ] } } } ]);

Vistas

  1. Crear una Vista: db.createView("vista_usuarios", "usuarios", [ { $match: { edad: { $gt: 25 } } }, { $project: { nombre: 1, edad: 1 } } ]);
  2. Consultar una Vista: db.vista_usuarios.find();

Triggers (Mediante Change Streams)

  1. Crear un Change Stream: const changeStream = db.usuarios.watch(); changeStream.on("change", (change) => { printjson(change); });

Publicaciones Similares

  • |

    NGINX

    Nginx se ha convertido en el servidor web y proxy inverso preferido para sitios de alto tráfico. Analizamos su arquitectura basada en eventos, que le permite gestionar miles de conexiones simultáneas con un consumo mínimo de recursos, y cómo configurarlo para potenciar la velocidad, seguridad y escalabilidad de tus aplicaciones web, incluyendo tu propio WordPress.

  • |

    Tensores y la Notación de Einstein, para que sirven en Física

    Curso de Tensores MathArg Tensores tutorial completo Curso de tensores completo por Javier García, otro de los grandes youtuber dedicado a la física y matemáticas que no te puedes perder. Aquí tienes una introducción clara y perfectamente encadenada para abrir un curso de tensores. Está pensada para que cualquier lector —incluso sin formación previa— vea…

  • |

    Web 3.0

    Principales características de la Web3: ¿Por qué es importante? La Web3 promete una estructura más segura y libre, donde los usuarios tienen más control sobre sus datos y pueden interactuar de manera más directa y segura23. Esto podría transformar la forma en que usamos internet, haciendo que sea más equitativo y menos dominado por grandes…

  • Mysql

    Descubre los fundamentos de MySQL, el sistema de gestión de bases de datos relacionales más popular del mundo y pilar esencial de WordPress. Analizamos su arquitectura, su importancia en el almacenamiento de datos y cómo optimizar su rendimiento para garantizar la velocidad y estabilidad de tus proyectos web.

  • Hablando de WINDOWS y comparando con linux y Mac.

    1. USB de Microsoft El “USB de Microsoft” para formatear Windows. Ningún portátil Windows (HP, Asus, Lenovo, Dell, Surface, Framework…) viene con un USB físico de Microsoft incluido de fábrica.Eso es algo que tú creas gratis en 10 minutos: Todos los portátiles premium 2026 tienen también partición de recuperación integrada (pulsas F11 o Shift+Reinicio al encender).Así que no es…

  • Docker y Docker-compose

    La idea de Docker, es la de crear aplicaciones/servicios que sean independientes y portables. Esto es, no importa que sistema operativo utilices o con que hardware cuentas, si puedes instalar docker, entonces podras correr tus contenedores en él. Entre las ventajas de usar docker, se encuentra la de olvidarte de instalar dependencias (ejemplo nodejs, java,…

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *