为mongo Shell编写脚本
在本页面
[success] Note
Mongo()
new Mongo(<host>)
new Mongo(<host:port>)
conn = new Mongo();
db = conn.getDB("myDatabase");
如果连接到已经开启了访问控制的MongoDB实例,则可以使用
db.auth()
方法进行身份验证。
此外,您可以使用connect()
方法连接到MongoDB实例。 以下示例使用非默认端口27020连接到在localhost上运行的MongoDB实例,并设置全局db变量:db = connect("localhost:27020/myDatabase");
[success] Note
为mongo shell编写脚本时,请考虑以下事项:
-
mongo
shell中的写操作默认情况下使用{ w: 1 }的写入策略。 如果执行批量操作,请使用Bulk()
方法。 有关更多信息,请参见:Write Method Acknowledgements)。 - 您不能在JavaScript文件中使用任何shell帮助程序(例如,使用
<dbname>
,show dbs等),因为它们不是有效的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脚本中打印结果游标中的所有项目,请使用以下惯用法:
cursor = db.collection.find();
while ( cursor.hasNext() ) {
printjson( cursor.next() );
}
--eval选项
mongo test --eval "printjson(db.getCollectionNames())"
这将使用连接到在本地主机接口上的端口27017上运行的
mongod
或mongos
实例的mongo
shell返回db.getCollectionNames()
的输出。
执行一个JavaScript文件您可以在mongo shell中指定.js文件,然后mongo将直接执行JavaScript。 考虑以下示例:
mongo localhost:27017/test myjsfile.js
此操作在mongo shell中执行
myjsfile.js
脚本,该脚本连接到可通过端口27017上的localhost接口访问的mongod实例上的测试数据库。或者,您可以使用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")
[success] Note
译者:王恒
校对:杨帅
最近更新 1yr ago