为 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");

交互式和脚本化 mongo 之间的区别

mongo shell 编写脚本时,请注意以下事项:

  • 若要设置db全局变量,请使用getDB()方法或connect()方法。您可以将数据库引用分配给db以外的变量。

  • mongo shell 中的写操作默认情况下使用{ w: 1 }的写关注。如果执行批量操作,请使用Bulk()方法。有关更多信息,请参见写入方法确认

  • 不能 在 JavaScript 文件中使用任何 Shell 帮助程序(例如use <dbname>show dbs等),因为它们不是有效的 JavaScript。

下表将最常见的mongo shell 助手 Map 到它们的 JavaScript 等效项。

Shell HelpersJavaScript Equivalents
show dbs , show databasesdb.adminCommand('listDatabases')
use <db>db = db.getSiblingDB('<db>')
show collectionsdb.getCollectionNames()
show usersdb.getUsers()
show rolesdb.getRoles({showBuiltinRoles: true})
show log <logname>db.adminCommand({ 'getLog' : '<logname>' })
show logsdb.adminCommand({ 'getLog' : '*' })
it游标= db.collection.find()

如果(cursor.hasNext()){
cursor.next();
}
  • 在交互模式下,mongo打印包括所有游标内容的操作结果。在脚本中,使用 JavaScript print()函数或特定于mongoprintjson()函数(返回格式化的 JSON)。

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上运行的mongodmongos实例的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将无法访问该文件。