Write Scripts for the mongo
Shell
Warning
The following document pertains to the mongo
shell, included in the MongoDB Server Download.
For information on the new MongoDB Shell (mongosh
) refer to the
mongosh documentation.
To understand the differences between the two shells, see
Comparison of the mongo
Shell and mongosh
.
You can write scripts for the mongo
shell in JavaScript
that manipulate data in MongoDB or perform administrative operation.
This tutorial provides an introduction to writing JavaScript that uses
the mongo
shell to access MongoDB.
Opening New Connections
From the mongo
shell or from a JavaScript file, you can
instantiate database connections using the Mongo()
constructor:
new Mongo() new Mongo(<host>) new Mongo(<host:port>)
Consider the following example that instantiates a new connection to
the MongoDB instance running on localhost on the default port and sets
the global db
variable to myDatabase
using the
getDB()
method:
conn = new Mongo(); db = conn.getDB("myDatabase");
If connecting to a MongoDB instance that enforces access control,
you can use the db.auth()
method to authenticate.
Additionally, you can use the connect()
method
to connect to the MongoDB instance. The following example connects to
the MongoDB instance that is running on localhost
with the
non-default port 27020
and set the global db
variable:
db = connect("localhost:27020/myDatabase");
Differences Between Interactive and Scripted mongo
Note
Starting in version 4.2, the mongo
shell provides the
method isInteractive()
that returns a boolean indicating
whether the mongo
shell is running in interactive or
script mode.
When writing scripts for the mongo
shell, consider the
following:
To set the
db
global variable, use thegetDB()
method or theconnect()
method. You can assign the database reference to a variable other thandb
.Write operations in the
mongo
shell use a write concern of { w: 1 } by default. If performing bulk operations, use theBulk()
methods.You cannot use any shell helper (e.g.
use <dbname>
,show dbs
, etc.) inside the JavaScript file because they are not valid JavaScript.The following table maps the most common
mongo
shell helpers to their JavaScript equivalents.Shell HelpersJavaScript Equivalentsshow 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(); } In interactive mode, the
mongo
shell prints the results of operations including the content of all cursors. In scripts, either use the JavaScriptprint()
function or themongo
specificprintjson()
function which returns formatted JSON.Example
To print all items in a result cursor in
mongo
shell scripts, use the following idiom:cursor = db.collection.find(); while ( cursor.hasNext() ) { printjson( cursor.next() ); }
Scripting
From the system prompt, use the mongo
shell to evaluate
JavaScript.
--eval
option
Use the --eval
option to the
mongo
shell to pass the shell a JavaScript fragment, as
in the following:
mongo test --eval "printjson(db.getCollectionNames())"
This returns the output of db.getCollectionNames()
using the
mongo
shell connected to the mongod
or
mongos
instance running on port 27017
on the
localhost
interface.
Execute a JavaScript file
You can specify a .js
file to the mongo
shell, and
mongo
will execute the JavaScript directly. Consider the
following example:
mongo localhost:27017/test myjsfile.js
This operation executes the myjsfile.js
script in a
mongo
shell that connects to the test
database
on the mongod
instance accessible via the localhost
interface on port 27017
.
Alternately, you can specify the mongodb connection parameters inside
of the javascript file using the Mongo()
constructor. See
Opening New Connections for more information.
You can execute a .js
file from within mongosh
,
using the load()
function, as in the following:
load("myjstest.js")
This function loads and executes the myjstest.js
file.
The load()
method accepts relative and absolute paths.
If the current working directory of mongosh
is /data/db
, and the myjstest.js
resides in the
/data/db/scripts
directory, then the following calls within
mongosh
would be equivalent:
load("scripts/myjstest.js") load("/data/db/scripts/myjstest.js")