警告
以下文档涉及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");
交互式和脚本化之间的区别 mongo
注意
从版本 4.2 开始, mongo shell提供了isInteractive()方法,该方法返回一个布尔值,指示mongo shell是以交互模式还是脚本模式。
在为mongo shell编写脚本时,请考虑以下因素:
mongoshell中的写入操作默认使用{ w: 1 }的写关注(write concern)。 如果执行批量操作,请使用Bulk()方法。您不能使用任何shell助手(例如
use <dbname>、show dbs等)包含在JavaScript文件中,因为它们不是有效的JavaScript。下表将最常见的
mongoshell助手映射到JavaScript等效项。shell助手JavaScript等效项show dbs,show databasesdb.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(); } 在交互模式下,
mongoshell会打印操作结果,包括所有游标的内容。 在脚本中,使用 JavaScriptprint()函数或返回格式化 JSON 的mongo特定printjson()函数。例子
要在
mongoshell脚本中打印结果游标中的所有项目,请使用以下习惯用法:cursor = db.collection.find(); while ( cursor.hasNext() ) { printjson( cursor.next() ); }
脚本编写
在系统提示符下,使用mongo shell来评估JavaScript 。
--eval 选项
--eval使用mongoshell 的 选项向该 传递shell JavaScript片段,如下所示:
mongo test --eval "printjson(db.getCollectionNames())"
这将使用连接到在db.getCollectionNames() mongoshellmongodmongos27017localhost接口上的端口 上运行的 或 实例的 返回 的输出。
执行 JavaScript 文件
您可以为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")