Cómo utilizar MongoDB Shell

0 acciones
0
0
0
0

Introducción

Los sistemas de bases de datos como MongoDB suelen utilizarse con una aplicación externa que se conecta al servidor de bases de datos y realiza operaciones como leer y procesar datos o escribir nuevas entradas. En estos casos, no se interactúa directamente con el servidor de bases de datos. El acceso directo puede ser necesario para realizar tareas administrativas en la base de datos o ejecutar consultas ad hoc.

Aquí es donde entra en juego el shell de MongoDB. El shell de MongoDB es una consola interactiva que permite conectarse al servidor de bases de datos y ejecutar comandos, lo que permite realizar tareas administrativas y leer, escribir o manipular datos directamente. El shell de MongoDB permite conectarse a la base de datos mediante la línea de comandos y trabajar con ella de forma interactiva desde una ventana de terminal. También permite ejecutar scripts externos para realizar tareas repetitivas con mayor facilidad.

En este tutorial, usará el shell de MongoDB para conectarse a una base de datos MongoDB y realizar consultas interactivas. También utilizará el sistema de ayuda integrado y las funciones de autocompletado disponibles en el shell.

Requisitos previos
  • Un servidor con un usuario normal (no root) con privilegios de sudo y un firewall configurado con UFW. Este tutorial se ha verificado con un servidor con Ubuntu 20.04.
  • MongoDB instalado en su servidor.
  • Su instancia de servidor MongoDB está protegida habilitando la autenticación y creando un usuario administrativo.

Nota: Los tutoriales relacionados sobre cómo configurar el servidor, instalar e instalar MongoDB de forma segura se refieren a Ubuntu 20.04. Este tutorial se centra en MongoDB, no en el sistema operativo subyacente. Siempre que la autenticación esté habilitada, generalmente funcionará con cualquier instalación de MongoDB, independientemente del sistema operativo.

Paso 1: Conectarse al servidor MongoDB

Para abrir un shell de MongoDB, ejecute el comando mongo desde el símbolo del sistema del servidor. De forma predeterminada, el comando mongo abre un shell que se conecta a una instancia de MongoDB instalada localmente y que se ejecuta en el puerto 27017.

Ejecute el comando mongo sin ningún parámetro adicional:

mongo

Esto imprime un mensaje de bienvenida con información sobre el servidor al que está conectado el shell, así como la versión de MongoDB instalada. El siguiente ejemplo muestra el servidor MongoDB ejecutándose en 127.0.0.1 (una interfaz de bucle invertido que representa localhost) en el puerto predeterminado de MongoDB (27017) y la versión 4.4.6.

Output
MongoDB shell version v4.4.6
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("b9a48dc7-e821-4b09-a753-429eedf072c5") }
MongoDB server version: 4.4.6

Intente listar todas las bases de datos del servidor. Después del comando de shell, escriba «show dbs» y pulse INTRO:

show dbs

Suponiendo que haya seguido el tutorial de requisitos previos sobre cómo proteger MongoDB, este comando no devolverá ningún resultado. Esto se debe a que, aunque el servidor MongoDB está en ejecución y el shell pudo conectarse a él, no proporcionó información de autenticación. Por lo tanto, no tiene derechos de acceso para trabajar con ninguna de las bases de datos del servidor, y el comando "show dbs" no devolverá ningún resultado.

Salga escribiendo el siguiente comando:

exit

El shell Mongo imprime un breve mensaje de despedida y lo regresa al shell del sistema:

Output
bye

Nota: En lugar de escribir el comando de salida, una forma alternativa de cerrar el shell es presionar CTRL+C.

Ahora vuelva a conectar el shell de MongoDB al servidor de bases de datos, pero esta vez proporcione un nombre de usuario y una contraseña para la autenticación correcta en su instancia de MongoDB. Para ello, debe proporcionar parámetros adicionales en la línea de comandos, como en el siguiente ejemplo:

mongo -u AdminSammy -p --authenticationDatabase admin

Este comando consta de varias partes:

  • -u: esta bandera establece el nombre de usuario utilizado para la autenticación en el servidor MongoDB.
  • -p: Esta opción indica al shell de MongoDB que use una contraseña al conectarse a la base de datos. Tras pulsar ENTER, se le solicitará una contraseña en la ventana del terminal.
  • --authenticationDatabase: Esta opción especifica la base de datos de autenticación de usuarios con la que inicia sesión. Normalmente, las cuentas administrativas se administran en la base de datos admin, pero si su base de datos de autenticación de usuarios es diferente, introduzca esa base de datos en lugar de admin.

Nota: Para conectarse a un servidor MongoDB que se ejecuta en una máquina distinta a localhost, puede agregar el indicador -h y luego la dirección IP de su servidor al comando de shell.

Introduzca la contraseña establecida durante la instalación y tendrá acceso nuevamente al shell.

Ahora ejecute el comando show dbs una vez más:

show dbs

Esta vez, el comando devuelve una lista de todas las bases de datos del sistema:

Output
admin 0.000GB
config 0.000GB
local 0.000GB

Debido a que está autenticado como un usuario privilegiado, el shell le permite ejecutar comandos en cualquiera de estas bases de datos.

Ahora que se ha conectado exitosamente al servidor MongoDB usando el shell MongoDB, puede avanzar y aprender cómo ejecutar comandos en el shell.

Paso 2 – Ejecutar los comandos

Al igual que otras interfaces de línea de comandos, el shell de MongoDB acepta comandos y devuelve los resultados deseados a la salida estándar. Como se mencionó anteriormente, en el shell de MongoDB, todos los comandos se escriben en la línea de comandos, lo cual se indica con un signo mayor que (>). Al presionar ENTER después del comando, este se ejecuta inmediatamente y devuelve la salida del comando a la pantalla.

La mayoría de los comandos en una base de datos MongoDB se ejecutan en una base de datos o un conjunto de bases de datos seleccionadas. La base de datos seleccionada actualmente está representada por el objeto db, accesible a través del shell. Puede comprobar qué base de datos está seleccionada escribiendo db en el shell:

db

En una instancia de shell recién conectada, la base de datos seleccionada siempre se llama prueba:

Output
test

Puede usar esta base de datos de forma segura para probar MongoDB y su shell. Para cambiar a otra base de datos, ejecute el comando "use" seguido del nombre de la nueva base de datos. Pruebe a cambiar a una base de datos llamada "fruit":

use fruits

El shell le informará que ahora está utilizando la nueva base de datos:

Output
switched to db fruits

Puede verificarlo escribiendo db nuevamente para encontrar el nombre de la base de datos seleccionada actualmente:

db

Esta vez, la salida refleja la nueva base de datos:

Output
fruits

Tenga en cuenta que no creó explícitamente la base de datos de frutas. MongoDB permite ejecutar comandos en bases de datos y colecciones que aún no existen. Solo crea estas estructuras cuando se inserta un objeto en ellas por primera vez. Incluso si cambia correctamente la base de datos actual a frutas, esta base de datos aún no existe.

Intente crear esta base de datos insertando un objeto en ella. El siguiente ejemplo explica cómo insertar un objeto en una colección de la base de datos llamada "manzanas". Al añadir este objeto, se crean tanto la base de datos de frutas como la colección de "manzanas".

Escriba la siguiente línea en el shell de MongoDB y presione ENTER. Observe el nombre de la colección resaltado (manzanas):

db.apples.insert()

Al presionar ENTER después del paréntesis de apertura, se abre un símbolo del sistema multilínea, lo que permite introducir comandos más largos en más de una línea. El comando de inserción no se completa hasta que se introduce un paréntesis de cierre. Hasta que lo haga, el símbolo del sistema cambia de un signo mayor que a puntos suspensivos (…).

No es necesario dividir los comandos de MongoDB en varias líneas como esta, pero hacerlo puede hacer que los comandos largos sean más fáciles de leer y comprender.

En la siguiente línea, encierre el objeto entre corchetes ({ y }). Este documento de ejemplo solo tiene un par de campo y valor:

{name: 'Red Delicious'}

Al volver a pulsar ENTER, aparecerá otra línea que permite añadir más parámetros de comando, como otros documentos o cualquier especificación permitida por el método de inserción de MongoDB. En este ejemplo, puede finalizar la entrada y ejecutar la operación introduciendo un paréntesis de cierre y pulsando ENTER.

Esta vez, el shell Mongo registra el final del comando de inserción y ejecuta el comando completo.

Output
WriteResult({ "nInserted" : 1 })

Tras insertar este nuevo objeto en la base de datos, tanto la base de datos de frutas como la colección de manzanas existirán. Consulte la lista de bases de datos disponibles con el comando show dbs:

show dbs

Nuevamente, devuelve una lista de todas las bases de datos disponibles, pero esta vez la lista incluye la base de datos de frutas:

Output
admin 0.000GB
config 0.000GB
fruits 0.000GB
local 0.000GB

El comando mostrar colecciones es útil para recuperar una lista de colecciones en la base de datos seleccionada actualmente:

show collections

Dado que se selecciona la base de datos de frutas, solo devolverá la colección de manzanas recién creada:

Output
apples

Con esto, aprendiste a ejecutar comandos en el shell de MongoDB. También creaste un objeto de instancia, que a su vez creó una nueva base de datos y una nueva colección que ahora existe en el servidor.

En el paso final de esta guía, aprenderá cómo invocar las funciones auxiliares del shell de MongoDB para comprender mejor los comandos y ejecutarlos más fácilmente.

Paso 3 – Obtener ayuda interactiva del shell

El shell de MongoDB cuenta con un sistema de ayuda integrado que permite obtener información sobre los comandos disponibles del sistema de base de datos y los objetos almacenados en él. Esta página de ayuda introductoria se puede consultar directamente en el intérprete de comandos del shell con el comando de ayuda:

help

El shell de MongoDB devuelve una lista de entradas de ayuda más detalladas que puede utilizar para obtener más información sobre partes específicas del shell, así como algunos ejemplos de los comandos más utilizados:

Output
db.help() help on db methods
db.mycoll.help() help on collection methods
sh.help() sharding helpers
rs.help() replica set helpers
help admin administrative help
help connect connecting to a db help
help keys key shortcuts
help misc misc things to know
help mr mapreduce
show dbs show database names
show collections show collections in current database
show users show users in current database
show profile show most recent system.profile entries with time >= 1ms
show logs show the accessible logger names
show log [name] prints out the last segment of log in memory, 'global' is default
use <db_name> set current database
db.mycoll.find() list objects in collection mycoll
db.mycoll.find( { a : 1 } ) list objects in mycoll where a == 1
it result of the last line evaluated; use to further iterate
DBQuery.shellBatchSize = x set default number of items to display on shell
exit quit the mongo shell

Las dos primeras entradas resaltadas en la salida de este ejemplo muestran cómo ejecutar el comando auxiliar para la base de datos actual y una colección de la misma, respectivamente. El nombre de la colección del ejemplo es mycoll, pero se puede usar cualquier nombre válido.

La última línea resaltada, db.mycoll.find(), es un ejemplo de un método para recuperar un objeto de una colección mediante el comando find, que lista los objetos de una colección determinada. Dado que las colecciones son unas de las estructuras más utilizadas en una base de datos Mongo, en este paso examinaremos cómo usar los métodos find() y help() de Mongo a nivel de colección.

Primero, acceda a la página del manual del paquete apples para encontrar los comandos disponibles para este paquete:

db.apples.help()

Nota: Si bien el comando de ayuda original era simplemente help, al ejecutar un método auxiliar en objetos de base de datos y de colección, debe seguir el comando con un par de paréntesis para que se lea como help() y no simplemente help.

La salida de este comando es una lista larga de comandos disponibles que puedes ejecutar en la colección de manzanas:

Output
DBCollection help
db.apples.find().help() - show DBCursor help
db.apples.bulkWrite( operations, <optional params> ) - bulk execute write operations, optional parameters are: w, wtimeout, j
db.apples.count( query = {}, <optional params> ) - count the number of documents that matches the query, optional parameters are: limit, skip, hint, maxTimeMS
db.apples.countDocuments( query = {}, <optional params> ) - count the number of documents that matches the query, optional parameters are: limit, skip, hint, maxTimeMS
. . .
db.apples.find([query],[fields]) - query is an optional query filter. fields is optional set of fields to return.
e.g. db.apples.find( {x:77} , {name:1, x:1} )
db.apples.find(...).count()
db.apples.find(...).limit(n)
db.apples.find(...).skip(n)
db.apples.find(...).sort(...)
. . .

Además de una lista limpia de comandos disponibles que puede ejecutar en la colección db.apples (cada uno seguido de una breve explicación de lo que hace el comando), esta página de manual también proporciona ejemplos de uso de comandos comúnmente utilizados, como find().

Este sistema de ayuda integrado funciona como una práctica referencia de los comandos disponibles. Puede usarlo para revisar la sintaxis si no recuerda la ortografía exacta o las partes aceptables de un comando.

Como ya aprendió en las páginas del manual que find() se puede utilizar para recuperar objetos de una colección, ahora puede recuperar el objeto creado en la colección apples en el paso anterior.

Sin embargo, este ejemplo destaca otra herramienta interactiva de MongoDB, conocida como autocompletado de comandos. El shell de MongoDB sigue el patrón de otros shells populares como Bash o zsh, donde al presionar la tecla TAB se completa automáticamente cualquier comando que se esté escribiendo.

Comience escribiendo lo siguiente, pero no presione ENTER todavía:

db.a

En lugar de escribir el nombre completo de la colección, presione la tecla TAB. El shell de MongoDB responde con una lista de todas las posibilidades disponibles, comenzando por la siguiente:

Output
> db.a
db.adminCommand( db.aggregate( db.apples db.auth(

Esta salida enumera tres comandos, indicados por paréntesis abiertos, así como el conjunto de manzanas.

Escribe otra letra en el Shell:

db.ap

Presione TAB una vez más. Esta vez, no hay otra opción que comenzar con ap y el shell de MongoDB autocompletará la entrada y escribirá db.apples. Siga el mismo principio y complete el comando find() con la función de autocompletado TAB. Escriba fi, pero no presione ENTER:

db.apples.fi

Al presionar TAB, el nombre del comando se autocompletará como db.apples.find. En este punto, al presionar TAB de nuevo, el shell mostrará más posibilidades, pero puede agregar manualmente un paréntesis de cierre para ejecutar el comando find:

db.apples.find()

El shell mostrará una lista de todos los objetos de la colección de manzanas. Solo habrá un objeto, el que importó anteriormente:

Output
{ "_id" : ObjectId("60f31447f5643f739b0276e9"), "name" : "Red Delicious" }

Resultado

Este artículo le presentará el shell de MongoDB. Este shell le permite insertar nuevos objetos en la base de datos, consultar colecciones existentes y realizar tareas administrativas para gestionar la base de datos, sus datos y sus usuarios.

Deja una respuesta

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

También te puede gustar