Skip to content

Latest commit

 

History

History
163 lines (130 loc) · 5.27 KB

scripts-para-mongo-shell.md

File metadata and controls

163 lines (130 loc) · 5.27 KB
description
El shell de mongo permite escribir scripts en JavaScript para manipular los datos en MongoDB o administrar operaciones.

Scripts para Mongo Shell

Abrir Nuevas Conexiones

Desde el shell o desde un archivo JavaScript, es posible instanciar una conexión a mongo utilizando el constructor de mongo Mongo():

> new Mongo();
> new Mongo(<host>);
> new Mongo(<host:puerto>);

El siguiente ejemplo instancia una nueva conexión con MongoDB que se ejecuta en localhost en el puerto predeterminado y establece la variable global db a la base de datos myDatabase usando el método getDB():

> conn = new Mongo();
> db = conn.getDB("myDatabase");

Si la conexión requiere de aseso, es posible utilizar el método db.auth() para autenticarse.

Adicionalmente, el método connect() recibe una cadena de texto con todos los parámetros de conexión. El siguiente ejemplo se conecta al localhost por el puerto 27018 y la base de datos myDatabase:

> db = connect("localhost:27020/myDatabase");

{% hint style="success" %} Lista de métodos del shell de mongo {% endhint %}

Modo Interactivo y Scripts

{% hint style="success" %} En la version 4.2, el shell de mongo proporciona un método isInteractive() que retorna un valor booleano que indica si estas en modo interactivo o script. {% endhint %}

Consideraciones para escribir scripts en mongo:

  • Para establecer la variable global db, se utiliza el metodo getDB() o connect().
  • No es posible usar comando de ayuda alguno del shell (e.g. use <dbname>, show dbs, etc.) in los archivos JavaScript porque no son validos en el lenguaje JavaScript.

La siguiente tabla muestra los comandos ayuda del shell y su equivalente en JavaScript.

Shell JavaScript Equivalents
show dbs, show databases db.adminCommand( 'listDatabases' )
use <db> db = db.getSiblingDB( '<db>' )
show collections db.getCollectionNames()
show users db.getUsers()
show roles db.getRoles( {showBuiltinRoles: true} )
show log <logname> db.adminCommand( { 'getLog' : '<logname>' } )
show logs db.adminCommand( { 'getLog' : '*' } )
it

cursor = db.collection.find()

if ( cursor.hasNext() ){

cursor.next();

}

En el modo interactivo o consola, mongo inprime lso resultados incluido el contenido de todos los cursores( documentos ). En un script este usa la función print() de JavaScript o la función de mongo printjson(), función que retorna un objeto JSON.

// Imprime todos los items del docuemnto en el cursor resultado

> cursor = db.collection.find();
> while ( cursor.hasNext() ) {
>    printjson( cursor.next() );
> }

Scripts

Desde la linea de comandos es posible evaluar script de JavaScript. Con la opción --eval se envia el fragmento de lineas:

> mongo test --eval "printjson(db.getCollectionNames())"

Retorna los nombres de las colecciones en la base de datos.

Ejecutar un archivo JavaScript

Los archivos JavaScript tienen la extensión .js y mongo tiene la posibilidad de ejecutar directamente este tipo de archivos:

> mongo localhost:27017/test myjsfile.js

Esta operación realiza la conexión con la base de datos test accediendo por localhost puerto 27017 (puerto por defecto).

Otra alternativa para ejecitar un archivo .js es usando la función load():

> load("myjstest.js")

Esta función carga y ejecuta el código del archivo myjstest.js.

El método load() admite path relativos y absolutos. Sí el directorio del shell de mongo es /data/db, y el archivo myjstest.js esta en el directorio /data/db/scripts, entonces los siguientes llamados son equivalentes:

> load("scripts/myjstest.js") // path relativo
> load("/data/db/scripts/myjstest.js") // path absoluto