警告
以下文档涉及mongo
Shell,包含在MongoDB Server下载中。有关新MongoDB Shell ()mongosh
的信息,请参阅mongosh文档。
要了解这两个 Shell 之间的差异,请参阅mongo
shell和 mongosh
的比较。
您可以 为 写入脚本,以处理mongo
shell JavaScriptMongoDB中的数据或执行管理操作。
本教程介绍如何编写使用 访问权限JavaScript mongo
shellMongoDB的 。
打开新连接
在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编写脚本时,请考虑以下因素:
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会打印操作结果,包括所有游标的内容。 在脚本中,使用 JavaScriptprint()
函数或返回格式化 JSON 的mongo
特定printjson()
函数。例子
要在
mongo
shell脚本中打印结果游标中的所有项目,请使用以下习惯用法:cursor = db.collection.find(); while ( cursor.hasNext() ) { printjson( cursor.next() ); }
脚本编写
在系统提示符下,使用mongo
shell来评估JavaScript 。
--eval
选项
--eval
使用mongo
shell 的 选项向该 传递shell JavaScript片段,如下所示:
mongo test --eval "printjson(db.getCollectionNames())"
这将使用连接到在db.getCollectionNames()
mongo
shellmongod
mongos
27017
localhost
接口上的端口 上运行的 或 实例的 返回 的输出。
执行 JavaScript 文件
您可以为mongo
shell指定一个 .js
文件, mongo
将直接执行JavaScript 。 考虑以下示例:
mongo localhost:27017/test myjsfile.js
此操作在 中执行myjsfile.js
脚本,该 Shellmongo
shell 连接到test
实例上的 数据库 mongod
localhost
27017
,可通过端口 上的 接口访问该数据库。
或者,您可以使用MongoDB JavaScriptMongo()
构造函数在 文件内指定 连接参数。有关更多信息,请参阅打开新连接。
您可以使用.js
mongosh
load()
函数从 中执行 文件,如下所示:
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")