Advertencia
El siguiente documento se relaciona con el mongo shell, incluida en la descarga del servidor MongoDB. Para obtener información sobre la nueva MongoDB Shell (mongosh), consulta la documentación de mongosh.
Para entender las diferencias entre los dos shells, consulte Comparación entre el mongo Shell y mongosh.
Puedes escribir scripts para la shell mongo en JavaScript que manipulen datos en MongoDB o realicen operaciones administrativas.
Este tutorial proporciona una introducción para escribir JavaScript que utilice el mongo shell para acceder a MongoDB.
Apertura de nuevas conexiones
Desde el shell mongo o desde un archivo de JavaScript, puedes instanciar conexiones de base de datos usando el constructor Mongo():
new Mongo() new Mongo(<host>) new Mongo(<host:port>)
Considere el siguiente ejemplo que instancia una nueva conexión a la instancia de MongoDB que se ejecuta en localhost en el puerto por defecto y establece la variable global db en myDatabase, utilizando el método getDB() :
conn = new Mongo(); db = conn.getDB("myDatabase");
Si te conectas a una instancia de MongoDB que haga cumplir el control de acceso, puedes usar el método db.auth() para autenticarte.
Además, puedes usar el método connect() para conectar con la instancia de MongoDB. El siguiente ejemplo se conecta a la instancia de MongoDB que se está ejecutando en localhost con el puerto no por defecto 27020 y establece la variable global db:
db = connect("localhost:27020/myDatabase");
Diferencias entre interactivo y scriptado mongo
Nota
A partir de la versión 4.2, el mongo shell proporciona el método isInteractive() que devuelve un valor booleano que indica si el mongo shell está en ejecución en modo interactivo o en modo script.
Al escribir scripts para el shell mongo, ten en cuenta lo siguiente:
Para establecer la variable global
db, utiliza el métodogetDB()o el métodoconnect(). Puedes asignar la referencia de la base de datos a una variable diferente adb.Las operaciones de escritura en la
mongoshell usan por defecto un nivel de confirmación de escritura (write concern) de { w: 1 }. Si realiza operaciones en bloque, utilice los métodosBulk().No puedes utilizar ningún asistente de Shell (por ejemplo,
use <dbname>,show dbs, etc.) dentro del archivo JavaScript porque no son JavaScript válido.La siguiente tabla relaciona los asistentes de shell
mongomás comunes con sus equivalentes en JavaScript.asistente de shellEquivalentes de JavaScriptshow dbs,show databasesdb.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, el
mongoshell imprime los resultados de las operaciones, incluido el contenido de todos los cursores. En scripts, utiliza la función de JavaScriptprint()o la funciónprintjson()específicamongo, que retorna JSON formateado.Ejemplo
Para imprimir todos los elementos de un cursor de resultados en
mongoscripts de shell, utiliza el siguiente recurso:cursor = db.collection.find(); while ( cursor.hasNext() ) { printjson( cursor.next() ); }
script
Desde el mensaje del sistema, utiliza la shell mongo para evaluar JavaScript.
--eval Opción
Utiliza la opción --eval en la mongo shell para pasarle un fragmento de JavaScript, como se muestra a continuación:
mongo test --eval "printjson(db.getCollectionNames())"
Esto devuelve la salida de db.getCollectionNames() usando el shell mongo conectado a mongod o la instancia mongos ejecutándose en el puerto 27017 en la interfaz localhost.
Ejecuta un archivo JavaScript
Puede especificar un archivo .js en el shell mongo, y mongo ejecutará el JavaScript directamente. Considera el siguiente ejemplo:
mongo localhost:27017/test myjsfile.js
Esta operación ejecuta el script myjsfile.js en un shell mongo que se conecta a la base de datos test en la mongod instancia accesible a través de la interfaz localhost en el puerto 27017.
Alternativamente, puedes especificar los parámetros de conexión de mongodb dentro del archivo javascript utilizando el constructor Mongo(). Consulta Nuevas conexiones que se abren para obtener más información.
Puede ejecutar un archivo .js desde mongosh, utilizando la función load(), como en el siguiente ejemplo:
load("myjstest.js")
Esta función carga y ejecuta el archivo myjstest.js.
El método load() acepta rutas relativas y absolutas. Si el directorio de trabajo actual de mongosh es /data/db, y el myjstest.js reside en el directorio /data/db/scripts, entonces las siguientes llamadas dentro de mongosh serían equivalentes:
load("scripts/myjstest.js") load("/data/db/scripts/myjstest.js")