--注意:
1)下列文档属于MongoDB Server下载包中包含的mongo shell。有关新MongoDB Shell的信息,mongosh,请参考mongosh文档。
2)为了理解两个shell间的差别,请看mongo Shell和mongsh比较部分。
您可以为mongo shell写JavaScript脚本以操作MongoDB中的数据或执行管理任务。
该指南介绍通过mongo shell访问MongoDB的JavaScript编写。
一.打开新连接
从mongo shell或JavaScript文件,您能通过Mongo()构造函数初始化数据库连接:
new Mongo()
new Mongo(<host>)
new Mongo(<host:port>)
考虑下列初始化一个到本机默认端口运行MongoDB实例新连接,并用getDB()方法设置全局db变量为myDatabase的例子:
conn = new Mongo();
db = conn.getDB("myDatabase");
如果连接到强制访问控制的MongoDB实例,您能用db.auth()方法进行认证。
此外,您能用connect()方法连接到MongoDB实例。下列例子连接到本机非默认端口27020上运行的MongoDB实例,并对db变量进行设置:
db = connect("localhost:27020/myDatabase");
二.交互和脚本mongo间的差别
--注意:
1)版本4.2开始,mongo shell提供isInteractive()方法返回布尔值以指示mongo shell是否运行于交互或脚本模式。
当为mongo shell写脚本时,考虑如下:
1)为了设置db全局变量,用getDB()或connect方法。您能将数据库库参考赋与db外的其他变量。
2)mongo shell中的写操作默认用一个{ w: 1 }的写关系。如果执行批量操作,用Bulk()方法。更多信息请参考Write Method Acknowledgements部分内容。
3)JavaScript文件中您不能使用任何shell帮助(例如:用<dbname>,show dbs,等等。),因为他们不是有效JavaScript。
下表对最常见mongo shell帮助与其JavaScript等同物进行了映射。
Shell帮助 JavaScript
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();
}
4)交互模式下,mongo打印包含所有游标内容操作的结果。脚本中,用JavaScript print()函数或返回格式化JSON的mongo特定pringjson()函数。
例如:
为了在mongo shell脚本中打印结果游标中所有项目,用下列习惯用法:
cursor = db.collection.find();
while ( cursor.hasNext() ) {
printjson( cursor.next() );
}
三.脚本
从系统提示符,用mongo评估JavaScript。
1.--eval选项
用mongo的--eval选项来将一个JavaScript片段传送给shell,如下所示:
mongo test --eval "printjson(db.getCollectionNames())"
这返回mongo shell连到运行在本机27017端口的mongod或mongos时db.getCollectionNames()的输出。
2.执行一个JavaScript文件
您能为mongo shell指定一个.js文件,且mongo将直接执行该JavaScript脚本。考虑下列例子:
mongo localhost:27017/test myjsfile.js
该操作在连接到通过本机27017端口可访问mongod实例的test数据库的mongo shell中执行myjsfile.sh脚本。
另外,您可以在用Mongo()构造函数的javascript文件中指定mongodb连接参数,更多信息请参考Opening New Connections部分内容。
您能用load()函数从mongo shell内执行一个.js文件,如下所示:
load("myjstest.js")
该函数加载和执行myjstest.sh文件。
load()方法接收相对和绝对路径。如果mongo shell的当前工作目录为/data/db,且myjstest.js在/data/db/scripts目录下,那么,mongo shell中的下列调用是一样的:
load("scripts/myjstest.js")
load("/data/db/scripts/myjstest.js")
--注意:
1)load()函数没有搜索路径。如果希望的脚本不在当前工作目录或指定的完整目录中,mongo将不能访问该文件。