Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs 菜单
Docs 主页
/
MongoDB Manual
/ /

为 Shell 编写脚本mongoshell

警告

以下文档涉及mongo Shell,包含在MongoDB Server下载中。有关新MongoDB Shell ()mongosh 的信息,请参阅mongosh文档。

要了解这两个 Shell 之间的差异,请参阅mongo shell和 mongosh 的比较。

您可以 为 写入脚本,以处理mongoshell JavaScriptMongoDB中的数据或执行管理操作。

本教程介绍如何编写使用 访问权限JavaScript mongoshellMongoDB的 。

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连接到在localhost上运行的MongoDB实例,并设立全局db变量:

db = connect("localhost:27020/myDatabase");

提示

注意

从版本 4.2 开始, mongo shell提供了isInteractive()方法,该方法返回一个布尔值,指示mongo shell是以交互模式还是脚本模式。

在为mongo shell编写脚本时,请考虑以下因素:

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

  • mongo shell中的写入操作默认使用{ w: 1 }的写关注(write concern)。 如果执行批量操作,请使用Bulk()方法。

  • 不能使用任何shell助手(例如 use <dbname>show dbs等)包含在JavaScript文件中,因为它们不是有效的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();
    }
  • 在交互模式下, mongo shell会打印操作结果,包括所有游标的内容。 在脚本中,使用 JavaScript print()函数或返回格式化 JSON 的mongo特定printjson()函数。

    例子

    要在mongo shell脚本中打印结果游标中的所有项目,请使用以下习惯用法:

    cursor = db.collection.find();
    while ( cursor.hasNext() ) {
    printjson( cursor.next() );
    }

在系统提示符下,使用mongo shell来评估JavaScript 。

--eval使用mongoshell 的 选项向该 传递shell JavaScript片段,如下所示:

mongo test --eval "printjson(db.getCollectionNames())"

这将使用连接到在db.getCollectionNames() mongoshellmongodmongos27017localhost接口上的端口 上运行的 或 实例的 返回 的输出。

您可以为mongo shell指定一个 .js文件, mongo将直接执行JavaScript 。 考虑以下示例:

mongo localhost:27017/test myjsfile.js

此操作在 中执行myjsfile.js 脚本,该 Shellmongoshell 连接到test 实例上的 数据库 mongodlocalhost27017,可通过端口 上的 接口访问该数据库。

或者,您可以使用MongoDB JavaScriptMongo()构造函数在 文件内指定 连接参数。有关更多信息,请参阅打开新连接

您可以使用.js mongoshload()函数从 中执行 文件,如下所示:

load("myjstest.js")

该函数加载并执行myjstest.js文件。

load()方法接受相对路径和绝对路径。 如果mongosh的当前工作目录是/data/db ,并且myjstest.js位于/data/db/scripts目录中,则mongosh中的以下调用是等效的:

load("scripts/myjstest.js")
load("/data/db/scripts/myjstest.js")

注意

load()函数没有搜索路径。 如果所需的脚本不在当前工作目录或指定的完整路径中, mongosh将无法访问权限该文件。

后退

访问 mongo Shell 帮助

在此页面上