On this page
为 mongo Shell 编写脚本
在本页面
您可以在 JavaScript 中为mongo shell 编写脚本,以在 MongoDB 中处理数据或执行 Management 操作。
本教程提供了有关编写使用mongo shell 访问 MongoDB 的 JavaScript 的介绍。
打开新连接
在mongo shell 或 JavaScript 文件中,您可以使用Mongo()构造函数实例化数据库连接:
new Mongo()
new Mongo(<host>)
new Mongo(<host:port>)
考虑以下示例,该示例实例化到默认端口上在 localhost 上运行的 MongoDB 实例的新连接,并使用getDB()方法将全局db
变量设置为myDatabase
:
conn = new Mongo();
db = conn.getDB("myDatabase");
如果连接到实施访问控制的 MongoDB 实例,则可以使用db.auth()方法进行身份验证。
此外,您可以使用connect()
方法连接到 MongoDB 实例。以下示例使用非默认端口27020
连接到在localhost
上运行的 MongoDB 实例,并设置全局db
变量:
db = connect("localhost:27020/myDatabase");
See also
交互式和脚本化 mongo 之间的区别
为mongo shell 编写脚本时,请注意以下事项:
若要设置
db
全局变量,请使用getDB()方法或connect()
方法。您可以将数据库引用分配给db
以外的变量。mongo shell 中的写操作默认情况下使用{ w: 1 }的写关注。如果执行批量操作,请使用Bulk()方法。有关更多信息,请参见写入方法确认。
您 不能 在 JavaScript 文件中使用任何 Shell 帮助程序(例如
use <dbname>
,show dbs
等),因为它们不是有效的 JavaScript。
下表将最常见的mongo shell 助手 Map 到它们的 JavaScript 等效项。
Shell Helpers | 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 |
游标= db.collection.find() |
如果(cursor.hasNext()){ cursor.next(); } |
Example
要使用mongo shell 脚本在结果光标中打印所有项目,请使用以下惯用法:
cursor = db.collection.find();
while ( cursor.hasNext() ) {
printjson( cursor.next() );
}
Scripting
在系统提示下,使用mongo评估 JavaScript。
--eval option
使用--eval选项和mongo来向 Shell 程序传递 JavaScript 片段,如下所示:
mongo test --eval "printjson(db.getCollectionNames())"
这将使用连接到localhost
接口上的端口27017
上运行的mongod或mongos实例的mongo shell 返回db.getCollectionNames()的输出。
执行 JavaScript 文件
您可以在mongo shell 中指定.js
文件,而mongo将直接执行 JavaScript。考虑以下示例:
mongo localhost:27017/test myjsfile.js
此操作在mongo shell 中执行myjsfile.js
脚本,该 shell 连接到mongod实例上的test
database,该实例可通过端口27017
上的localhost
接口访问。
或者,您可以使用Mongo()
构造函数在 javascript 文件中指定 mongodb 连接参数。有关更多信息,请参见打开新连接。
您可以使用load()
函数从mongo shell 中执行.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")
Note
load()
函数没有搜索路径。如果所需的脚本不在当前工作目录或完整的指定路径中,则mongo将无法访问该文件。