Cómo instalar y utilizar la base de datos NoSQL MongoDB en Rocky Linux 9
MongoDB es un sistema de base de datos NoSQL (no SQL o no relacional) de código abierto, multiplataforma y distribuido. En lugar de almacenar datos en tablas como las bases de datos SQL tradicionales, MongoDB utiliza documentos flexibles para almacenar diversas formas de datos. MongoDB utiliza el formato BSON para almacenar datos, que es el formato JSON binario.
MongoDB es una base de datos NoSQL distribuida con alta disponibilidad integrada, conmutación por error automática y redundancia de datos, escalado horizontal mediante fragmentación en clústeres distribuidos, y admite el despliegue geográfico multirregional. MongoDB también proporciona una API de consulta que admite operaciones CRUD (lectura y escritura), canalización de agregación de datos, búsqueda de texto y consultas geoespaciales.
Algunas empresas notables que utilizan MongoDB son Forbes, Toyota, SEGA, EA, Vodafone, Verizon y muchas más.
En este tutorial, instalarás la Base de Datos NoSQL MongoDB en el servidor Rocky Linux 9. También aprenderás a optimizar un sistema Linux para desplegar el Servidor MongoDB. Al final de este tutorial, también aprenderás las consultas básicas del Servidor de Base de Datos MongoDB.
Al completar esta guía, tendrás MongoDB instalado y aprenderás las operaciones básicas de MongoDB, como gestionar usuarios, crear bases de datos, insertar y recuperar datos de MongoDB, actualizar datos en MongoDB y cómo eliminar datos del servidor MongoDB.
Requisitos previos
Para completar este tutorial, debes disponer de los siguientes requisitos:
- Un servidor Rocky Linux 9 – Este ejemplo utiliza un Rocky Linux con el nombre de host‘mongodb-rocky‘.
- Un usuario no root con privilegios de administrador sudo/root.
Con tu Rocky Linux listo, ya puedes empezar.
Añadir el repositorio MongoDB
MongoDB sólo está disponible en el repositorio oficial de MongoDB. Para instalarlo, debes añadir el repositorio de MongoDB a tu sistema. En el momento de escribir esto, la última versión de MongoDB es la v6.0, que utilizarás durante el resto de esta guía.
En el primer paso, añadirás el repositorio oficial de MongoDB a tu sistema Rocky Linux.
Para empezar, crea un nuevo archivo de repositorio‘/etc/yum.repos.d/mongodb-org-6.0.repo‘ utilizando el siguiente comando del editor nano.
sudo nano /etc/yum.repos.d/mongodb-org-6.0.repo
Añade las siguientes líneas del repositorio MongoDB 6.0 al archivo.
[mongodb-org-6.0] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/6.0/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc
Guarda el archivo y sal del editor cuando hayas terminado.
Ahora ejecuta el siguiente comando dnf para verificar la lista de repositorios en tu sistema Rocky Linux.
sudo dnf repolist
Recibirás una salida como ésta – El repositorio MongoDB 6.0 se ha añadido al sistema Rocky Linux.
Con el repositorio MongoDB añadido a tu sistema, a continuación iniciarás la instalación de MongoDB.
Instalar el Servidor MongoDB y Mongosh
En este paso, instalarás el servidor MongoDB en el servidor Rocky Linux. A continuación, iniciarás y habilitarás el servicio MongoDB para que se ejecute automáticamente al arrancar.
Ejecuta el siguiente comando dnf para instalar los paquetes de MongoDB. El‘mongodb-org‘ es el paquete principal del servidor MongoDB, y el‘mongodb-mongosh‘ es la nueva versión del cliente MongoDB, una alternativa al cliente‘mongo‘.
sudo dnf install mongodb-org mongodb-mongosh
Cuando se te pida, introduce y para confirmar y pulsa ENTER para continuar.
También se te pedirá que aceptes la clave GPG de MongoDB. Introduce y y pulsa ENTER para confirmar.
Una vez instalado el servidor MongoDB, ejecuta el siguiente comando systemctl para iniciar el servicio MongoDB y verifica el servicio para asegurarte de que se está ejecutando.
sudo systemctl start mongod sudo systemctl status mongod
Deberías recibir una salida como la siguiente captura de pantalla – El servicio MongoDB se está ejecutando y está habilitado. El servicio MongoDB se ejecutará automáticamente al arrancar.
Ahora que el servidor MongoDB se está ejecutando, en el siguiente paso configurarás y optimizarás tu sistema Rocky Linux para la implementación de MongoDB.
Configurar el sistema
En este paso, configurarás tu servidor Rocky Linux y lo optimizarás para la instalación de MongoDB. Esto incluye desactivar Páginas Transparentes Enormes (THP), aumentar el ulimit y aumentar la memoria virtual máxima mediante el archivo sysctl.conf.
Puedes utilizar diferentes métodos para desactivar las Páginas Enormes Transparentes (THP). En esta guía, desactivarás THP permanentemente mediante el servicio systemd.
Crea un nuevo archivo de servicio systemd ‘/etc/systemd/system/disable-thp.service ‘ utilizando el siguiente comando del editor nano.
sudo nano /etc/systemd/system/disable-thp.service
Añade las siguientes líneas al archivo.
[Unit] Description=Disable Transparent Huge Pages (THP) [Service] Type=simple ExecStart=/bin/sh -c "echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled && echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag" [Install] WantedBy=multi-user.target
Guarda el archivo y sal del editor.
A continuación, ejecuta el siguiente comando systemctl para recargar el gestor systemd y aplicar un nuevo archivo de servicio.
sudo systemctl daemon-reload
Después, inicia y activa el servicio systemd«disable-thp» utilizando el siguiente comando systemctl.
sudo systemctl enable disable-thp sudo systemctl start disable-thp
Con el servicio ‘disable-thp‘ activado, las Páginas Transparentes Enormes (THP) se desactivarán automáticamente en cada arranque.
A continuación, aumenta el ulimit de tu sistema para la implementación de MongoDB. El ulimit por defecto para un sistema Linux genérico es‘1024‘, y MongoDB requiere al menos‘64000‘.
Para cambiar el ulimit, crea un nuevo archivo de configuración ‘/etc/security/limits.d/mongodb.conf ‘ utilizando el siguiente comando del editor nano.
sudo nano /etc/security/limits.d/mongodb.conf
Añade las siguientes líneas al archivo. Con estas líneas, configurarás ulimit para el usuario específico‘mongod‘, que es el usuario por defecto que ejecuta el servidor MongoDB.
mongod soft nproc 64000 mongod hard nproc 64000 mongod soft nofile 64000 mongod hard nofile 64000
Guarda el archivo y sal del editor cuando hayas terminado.
Tras configurar ulimit, ahora aumentarás la memoria virtual máxima de tu servidor MongoDB mediante el archivo ‘/etc/sysctl.conf’.
Abre el archivo de configuración‘/etc/sysctl.conf ‘ utilizando el siguiente comando del editor nano.
sudo nano /etc/sysctl.conf
Añade las siguientes líneas al archivo.
fs.file-max = 2097152 vm.max_map_count = 262144 vm.swappiness = 1
Guarda el archivo y sal del editor.
Por último, ejecuta el siguiente comando para reiniciar tu sistema Rocky Linux y aplicar los cambios en el sistema que has realizado.
sudo reboot
Con esto, tu servidor MongoDB debería funcionar ahora con THP desactivado, ulimit‘64000‘ para los usuarios de MongoDB, y la memoria virtual máxima‘262144‘. En el siguiente paso, configurarás el usuario admin de MongoDB y, a continuación, aprenderás las operaciones básicas de MongoDB.
Configurar Admin para MongoDB
Llegados a este punto, ya estás ejecutando MongoDB en el servidor optimizado Rocky Linux. Y en este paso, asegurarás tu despliegue de MongoDB creando un nuevo usuario admin y habilitando la autenticación y autorización en el servidor MongoDB.
En primer lugar, inicia sesión en el servidor MongoDB mediante el comando‘mongosh‘ que aparece a continuación.
mongosh
Ahora ejecuta la siguiente consulta para desactivar la monitorización de MongoDB, que está activada en la instalación por defecto de MongoDB.
db.disableFreeMonitoring()
A continuación, cambia a la base de datos por defecto‘admin‘ utilizando la consulta siguiente.
use admin
Ahora crea un nuevo usuario administrador de MongoDB utilizando la siguiente consulta MongoDB. Asegúrate también de cambiar el nombre de usuario en la siguiente consulta.
Este ejemplo creará un nuevo usuario administrador‘miAliceAdmin‘. Con la consulta‘passwordPrompt()‘, establecerás la contraseña mediante prompt, en lugar de utilizar el texto plano dentro de la consulta.
db.createUser( { user: "myAliceAdmin", pwd: passwordPrompt(), roles: [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] } )
Cuando se cree el nuevo usuario, recibirás una salida como ‘{ ok: 1 }‘.
Ahora pulsa Ctrl+d o escribe‘quit‘ para salir del intérprete de comandos de MongoDB.
A continuación, abre el archivo de configuración de MongoDB‘/etc/mongod.conf‘ utilizando el siguiente comando del editor nano.
sudo nano /etc/mongod.conf
Descomenta el parámetro‘security‘ y añade la línea‘authorization: enabled‘ para activar la autenticación y autorización de MongoDB.
security: authorization: enabled
Guarda el archivo y sal del editor cuando hayas terminado.
Por último, ejecuta el siguiente comando systemctl para reiniciar el servicio MongoDB y aplicar los cambios.
sudo systemctl restart mongod
Ahora que el usuario administrador de MongoDB está creado y la autorización y autenticación están habilitadas en el servidor MongoDB. A continuación comprobarás la autenticación del usuario con dos métodos diferentes.
Accede al shell de MongoDB mediante el comando‘mongosh‘ que aparece a continuación.
mongosh
Tras acceder, ejecuta la siguiente consulta para autenticarte como usuario administrador de MongoDB«miAliceAdmin«. Cuando se te pida la contraseña, introduce tu contraseña de administrador de MongoDB.
use admin db.auth("myAliceAdmin", passwordPrompt())
Cuando la autenticación tenga éxito, deberías recibir una salida como‘{ ok: 1 }‘.
Otro método para acceder al shell de MongoDB y autenticarte es con el comando mongosh simple que aparece a continuación. Introduce tu contraseña cuando se te solicite.
Con este comando, te conectarás al servidor MongoDB que se ejecuta en el puerto 27017, y te autentificarás en la base de datos‘admin‘ con el nombre de usuario‘miAliceAdmin‘.
mongosh --port 27017 --authenticationDatabase \ "admin" -u "myAliceAdmin" -p
Deberías iniciar sesión en el shell de MongoDB cuando la autenticación tenga éxito.
Ahora tu servidor MongoDB está protegido con autenticación de usuario y contraseña. Además, has creado un usuario administrador en MongoDB. A continuación, aprenderás a crear un nuevo usuario MongoDB que puedas utilizar para tus aplicaciones.
Crear usuario y base de datos en MongoDB
En este paso, crearás un nuevo usuario MongoDB que puedas utilizar para tus aplicaciones. Además, también verificarás la lista de usuarios en el servidor MongoDB y, a continuación, iniciarás sesión en el shell de MongoDB con tu nuevo usuario MongoDB.
Antes de empezar, asegúrate de que has iniciado sesión en el shell de MongoDB. A continuación, ejecuta el siguiente comando para cambiar a la nueva base de datos ‘testdb’ y crear un nuevo usuario MongoDB.
En este ejemplo, crearás un nuevo usuario MongoDB‘myTestUser‘ con el rol‘readWrite’ para la base de datos‘testdb’ y el rol‘read‘-only’ para la base de datos‘reporting‘.
use tesdb db.createUser( { user: "myTestUser", pwd: passwordPrompt(), // or cleartext password roles: [ { role: "readWrite", db: "testdb" }, { role: "read", db: "reporting" } ] } )
Cuando se te solicite, introduce la nueva contraseña para el nuevo usuario «miUsuarioDePruebas». Deberías recibir el mensaje‘{ ok: 1 }‘, lo que significa que se ha creado el nuevo usuario ‘myTestUser‘.
A continuación, cambia a la base de datos ‘admin’ y ejecuta la siguiente consulta para verificar la lista de usuarios de tu servidor MongoDB.
use admin db.system.users.find()
Verás un resultado similar a éste: Se ha creado el nuevo usuario«miUsuarioDePrueba» con el rol «lecturaEscritura» en la base de datos «testdb» y el rol«lectura» en la base de datos de informes.
Ahora pulsa Ctrl+d para salir y abandonar el intérprete de comandos de MongoDB.
Para asegurarte de que se ha creado el usuario MongoDB ‘myTestUser‘, ahora iniciarás sesión en MongoDB a través de‘myTestUser‘.
Ejecuta el siguiente comando para acceder a MongoDB a través del usuario«miUsuarioDePrueba». Cuando se te pida la contraseña, introdúcela.
mongosh --port 27017 -u "myTestUser" \ --authenticationDatabase "testdb" -p
Después de iniciar sesión, ejecuta la siguiente consulta MongoDB para verificar tu conexión actual.
db.runCommand({connectionStatus : 1})
Verás una salida similar a esta captura de pantalla – Ahora te has conectado y autenticado en el servidor MongoDB a través del usuario‘miUsuarioDePrueba’.
Ahora que has creado un nuevo usuario MongoDB, aprenderás cómo insertar y recuperar datos en MongoDB.
Insertar y consultar datos en MongoDB
Tras crear un nuevo usuario de MongoDB, ahora aprenderás a crear la base de datos, insertar datos y recuperar datos de MongoDB. Aprenderás a utilizar las consultas «insertOne» e«insertMany» para añadir datos a MongoDB y a utilizar operadores de consulta como«$in» y«$gte» con la consulta«find» para recuperar datos de MongoDB.
En primer lugar, asegúrate de que has iniciado sesión en el servidor MongoDB con tu nuevo usuario, este ejemplo es ‘myTestUser‘. A continuación, cambia a la base de datos‘testdb‘ mediante la consulta‘use‘ que aparece a continuación.
use testdb
Ahora tu shell de MongoDB pasará a gustar ‘testdb>’.
A continuación, ejecuta la siguiente consulta para crear una nueva colección e insertar nuevos datos en ella. En este ejemplo, crearás una nueva colección«películas» e insertarás nuevos datos mediante la consulta«insertOne«, que puede utilizarse para insertar un solo dato en una colección.
db.movies.insertOne( { title: "The Hobbit", genres: [ "Adventure", "Fantasy" ], runtime: 172, rated: "R", year: 2012, directors: [ "Peter Jackson" ], cast: [ "Martin Freeman", "Ian McKellen", "Richard Armitage" ], type: "movie" } )
Ahora recibirás una salida como‘reconocido: ok‘, lo que significa que se han añadido los nuevos datos y se ha creado la nueva colección.
Ahora ejecuta la siguiente consulta para verificar la lista de colecciones de la base de datos‘testdb’ y mostrar los datos disponibles dentro de ‘testdb’.
La consulta «mostrar colección» te mostrará la lista de colecciones/tablas de la base de datos actual, y la consulta«encontrar» te mostrará los datos disponibles en tu base de datos. También puedes filtrar campos específicos mediante la consulta«buscar».
show collections db.movies.find( {} )
Deberías recibir un resultado como éste: La colección«películas» está disponible en la base de datos«testdb«. Además, verás los nuevos datos que has añadido, que son
A continuación, también puedes añadir varios datos a la vez mediante la consulta‘insertMany‘. Ejecuta la siguiente consulta para insertar dos datos en la colección «películas» mediante la consulta «insertMany«.
db.movies.insertMany([ { title: "The Lord of the Rings", genres: [ "Action", "Adventure", "Drama" ], runtime: 240, rated: "PG-13", year: 2001, directors: [ "Peter Jackson" ], cast: [ "Elijah Wood", "Ian McKellen", "Orlando Bloom" ], type: "movie" }, { title: "Harry Potter", genres: [ "Adventure", "Family", "Fantasy" ], runtime: 140, rated: "R", year: 2007, directors: [ "David Yates" ], cast: [ "Daniel Radcliffe", "Emma Watson", "Rupert Grint" ], type: "movie" } ])
Salida:
Ejecuta ahora la consulta «buscar» para recuperar los datos. Con esto, recuperarás los datos con el filtro‘directores: «Peter Jackson»‘.
db.movies.find( { directors: "Peter Jackson" })
Obtendrás un resultado como éste: Todas las películas con«directores:«Peter Jackson«‘ se mostrará en tu terminal.
A continuación, también puedes especificar condiciones en la consulta«buscar» utilizando operadores de consulta.
Ejecuta la siguiente consulta para recuperar cualquier dato en el que los‘géneros‘ sean ‘Acción‘ y/o‘Familiar‘. El operador «$in» puede utilizarse para recuperar datos que coincidan con cualquiera de los valores especificados en una matriz.
db.movies.find( { genres: { $in: [ "Action", "Family" ] } } )
Ahora deberías recibir una salida como ésta:
Otro operador de consulta que puedes probar es ‘$gte‘, que se puede utilizar para recuperar datos que sean mayores o iguales que un valor especificado.
Antes, ejecuta la siguiente consulta para insertar nuevos datos en la colección«películas«.
db.movies.insertOne( { title: "Transformers", genres: [ "Adventure", "Action", "Sci-Fi" ], runtime: 150, rated: "PG-13", year: 2007, directors: [ "Michael Bay" ], cast: [ "Shia LaBeouf", "Megan Fox", "Josh Duhamel" ], type: "movie" } )
Ahora ejecuta la siguiente consulta para recuperar datos con el operador de consulta«$gte«. Esto recuperará todas las películas con‘género:«Acción«‘ que se estrenaron después o igual que ‘a 2001‘.
db.movies.find( { genres: "Action", "year": { $gte: 2001 } } )
Recibirás un resultado similar a éste: en este ejemplo, obtendrás dos películas estrenadas después o igual a 2001 con los géneros «Acción«, que son «ElSeñor de los Anillos» y«Transformers».
Con esto en mente, ya has aprendido a insertar y recuperar datos en MongoDB. Has aprendido la consulta básica «insertOne» para añadir un dato y la consulta «insertMany» para añadir varios datos a la vez.
También has aprendido el uso básico de la consulta ‘find’ para recuperar datos de MongoDB. Además, también has aprendido a utilizar las consultas operador‘$in‘ y‘$gte‘ en MongoDB.
En el siguiente paso, aprenderás a actualizar datos en colecciones MongoDB.
Actualizar datos en MongoDB
En este paso, aprenderás a actualizar datos en MongoDB utilizando dos consultas, la ‘updateOne’ para actualizar un campo dentro del documento y utilizando la ‘replaceOne’ para reemplazar por completo los primeros datos coincidentes por datos nuevos.
Para actualizar datos en MongoDB, puedes utilizar varios métodos y consultas. En este ejemplo, aprenderás a utilizar las consultas ‘updateOne‘ y‘replaceOne‘. La consulta «updateOne» puede utilizarse para actualizar un único campo del documento, mientras que la consulta «replaceOne» sustituirá todo el documento.
Ejecuta la siguiente consulta para actualizar datos utilizando la consulta «updateOne«. En este ejemplo, actualizarás el campo ‘rated: «PG-13«‘ a ‘clasificada: «R«‘ en la película‘Transformers‘.
db.movies.updateOne( { title: "Transformers" }, { $set: { rated: "R" } })
Deberías recibir una salida como ‘matchedCount: 1‘ y ‘modifiedCount: 1‘.
Ahora comprueba los nuevos datos con la siguiente consulta. Deberías ver que los datos de la película «Transformers» se han actualizado.
db.movies.find( { title: "Transformers" })
A continuación, ejecuta la siguiente consulta«replaceOne» para sustituir los primeros datos coincidentes del filtro y reemplazar todo el documento con los nuevos datos. En este ejemplo, sustituirás todo el documento de la película «Transformers» por los nuevos datos.
db.movies.replaceOne( { title: "Transformers" }, { title: "Transformers: Dark of the Moon", genres: [ "Adventure", "Action", "Sci-Fi" ], runtime: 160, rated: "PG-13", year: 2011, directors: [ "Michael Bay" ], cast: [ "Shia LaBeouf", "Rosie Huntington-Whiteley", "Tyrese Gibson" ], type: "movie" } )
Ahora deberías obtener una salida como ésta.
Ahora ejecuta la siguiente consulta para verificar los datos recién actualizados en tu MongoDB.
db.movies.find( { title: "Transformers" }) db.movies.find( { title: "Transformers: Dark of the Moon" })
Deberías obtener un resultado similar a este: La película «Transformers» se ha eliminado/reemplazado por la nueva película«Transformers: Dark of the Moon’.
Eliminar datos en MongoDB
En este paso, aprenderás cómo eliminar datos en un documento MongoDB. A continuación, aprenderás a eliminar la base de datos y a eliminar el usuario en MongoDB.
Ejecuta el siguiente comando para eliminar datos de la colección MongoDB. En este ejemplo, borrarás todo el documento‘Transformers: Dark of the Moon‘ mediante la consulta‘deleteMany‘.
db.movies.deleteMany( { title: "Transformers: Dark of the Moon" } ) db.movies.find( { title: "Transformers: Dark of the Moon" })
Deberías recibir una salida como ‘deletedCount: 1‘.
A continuación, ejecuta el siguiente comando para eliminar un único documento mediante la consulta «eliminarUno«. Esto eliminará el primer dato coincidente dentro del filtro.
En este ejemplo, borrarás el primer documento que coincida con‘cast: «Ian McKellen»‘.
db.movies.deleteOne( { cast: "Ian McKellen" } ) db.movies.find( { cast: "Ian McKellen" })
A continuación se muestra el resultado antes y después de eliminar los datos.
Antes de la eliminación – Deberías ver dos películas con el ‘reparto:«IanMcKellen«‘.
Después de eliminar el documento – deberías ver sólo una película con el ‘reparto:«IanMcKellen«‘.
A continuación, aprenderás a eliminar usuarios y bases de datos en MongoDB. Para eliminar un usuario en MongoDB, debes tener el rol ‘root’ en tu usuario administrador de MongoDB.
Ejecuta el siguiente comando para autenticarte como usuario administrador de MongoDB‘miAliceAdmin‘ e introduce tu contraseña.
use admin db.auth("myAliceAdmin", passwordPrompt())
Una vez autenticado como administrador de MongoDB, ejecuta la siguiente consulta para otorgar al usuario administrador el rol «root«.
db.grantRolesToUser("myAliceAdmin", ["root"]);
Ahora cambia a‘testdb‘ y elimina los usuarios de la base de datos‘testdb‘ mediante la siguiente consulta. Esto eliminará el usuario‘myTestUser‘ de MongoDB.
use testdb db.runCommand( { dropAllUsersFromDatabase: 1 } )
Deberías obtener una salida como‘{ n:1, ok: 1 }‘.
A continuación, ejecuta la siguiente consulta para eliminar/borrar la base de datos‘testdb‘.
db.dropDatabase()
Y deberías obtener un resultado como ‘{ ok: 1, eliminada: ‘testdb’ }‘.
Ahora que‘testdb’ y los usuarios de la base de datos están eliminados.
Ejecuta la siguiente consulta para cambiar a la base de datos ‘admin‘ y comprueba la lista de bases de datos de tu servidor MongoDB. Deberías ver que la base de datos ‘testdb‘ se ha eliminado.
use admin show dbs
Por último, ejecuta la siguiente consulta para mostrar y listar los usuarios en MongoDB.
db.system.users.find()
Deberías recibir una salida como esta – El uso‘myTestUser‘ ha sido eliminado/borrado del servidor MongoDB.
Conclusión
En esta guía, has instalado la última versión de MongoDB Server (Community Edition) en un servidor Rocky Linux 9. También has aprendido a habilitar la autenticación y la autorización en el servidor MongoDB y a optimizar el servidor Linux para la implementación de MongoDB.
Por el camino, has aprendido el uso básico del comando Mongosh para conectar y gestionar el servidor MongoDB. Y aprendido las consultas básicas de MongoDB para crear usuarios, crear bases de datos, insertar y recuperar datos, actualizar datos y borrar/eliminar datos del servidor MongoDB.
Con esto, puedes aprender más sobre las consultas MongoDB en Documentación MongoDB. Además, si estás interesado en desplegar MongoDB en un gran despliegue, puedes intentar habilitar la fragmentación (sharding) que te permite configurar el escalado horizontal en el clúster de MongoDB.