说明:英文原文地址:https://docs.mongodb.com/v3.2/tutorial/write-scripts-for-the-mongo-shell/。
本文章属个人翻译,作个人学习之用,如有雷同,纯属巧合。如有错误之处,欢迎指正。
给mongo Shell编写脚本
你可以用Javascript给mongo
shell编写脚本,对MongoDB中的数据进行操作,或者执行管理操作。欲知关于mongo
shell的更多信息,参见在服务器上通过mongo shell实例运行.js文件部分以获得关于使用这些mongo
脚本的更多信息。
本篇文章简要介绍了编写Javascript脚本以便用mongo
shell来访问MongoDB。
打开新连接
在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实例。以下例子连接到运行在localhost
(本地)非默认端口27020
上的MongoDB实例,然后设置全局db
变量:
db = connect("localhost:27020/myDatabase");
交互式和使用脚本的mongo的不同
当给mongo
shell编写脚本时,注意以下几点:
要设置
db
全局变量,用getDB()
方法或者connect()
方法。你可以把数据库引用赋值给除db
之外的变量。mongo
shell中的写操作默认用{w:1}
write concern。若执行批量操作,使用Bulk()
方法。参考写方法确认以获取更多信息。不可以在Javascript脚本中使用任何shell帮助(如
use <dbname>
,show dbs
等),应为它们不是有效的Javascript代码。下面的表格把常用的
mongo
shell帮助命令对应到相应的Javascript等价代码:
Shell 帮助命令 | JavaScript 等价代码 |
---|---|
show dbs , show databases | db.adminCommand('listDatabases') |
use | db = db.getSiblingDB('') |
show collections | db.getCollectionNames() |
show users | db.getUsers() |
show roles | db.getRoles({showBuiltinRoles: true}) |
show log | db.adminCommand({ 'getLog' : '' }) |
show logs | db.adminCommand({ 'getLog' : '*' }) |
it | cursor = db.collection.find()if ( cursor.hasNext() ){ cursor.next();} |
* 在交互模式,mongo
打印出操作结果,包括所有游标的内容。在Javascript中,可以使用print()
函数或者mongo
shell特有的返回格式化后JSON的函数printjson()
来打印内容。
例子:
要在
mongo
shell脚本中打印一个游标的所有数据,使用如下惯用的方法:
cursor = db.collection.find(); while ( cursor.hasNext() ) { printjson( cursor.next() ); }
执行脚本
在命令行中,用mongo
来执行Javascript脚本。
–eval选项
用--eval
选项,给mongo
传递一个Javascript片段,如下:
mongo test --eval "printjson(db.getCollectionNames())"
以上代码使用mongo
shell连接到运行在本地27017端口上的mongod
或者mongos
实例,返回与db.getCollectionName()
相同的输出。
执行Javascript文件
你可以给mongo
shell指定一个.js
文件,mongo
将会直接执行Javascript。如下:
mongo localhost:27017/test myjsfile.js
该操作连接到本地27017端口上的mongod
实例上的test
数据库,然后在mongo
shell中执行myjsfile.js
文件。
你可以在Javascript文件的Mongo()
构造函数中指定mongodb连接参数。参见打开新连接。
可用在mongo
shell中用load()
函数执行.js
文件,如下:
load("myjstest.js")
该函数载入并执行myjstest.js
文件。
load()
函数接受相对和绝对路径。若mongo
shell的当前工作目录是/data/db
,myjstest.js
在/data/db/scripts目录中,以下在
mongo`shell中的的命令是等价的。
load("scripts/myjstest.js") load("/data/db/scripts/myjstest.js")
注意:
load()
函数没有搜索路径。如果脚本不在当前工作目录或者全路径中,mongo
没法找到文件。