为Mongo Shell编写脚本

您可以用javascript编写mongo shell的脚本,以便在mongodb中操作数据或执行管理操作。

本教程介绍如何编写使用mongo shell访问mongodb的javascript。

打开新连接

从mongo shell或javascript文件,可以使用mongo()构造函数实例化数据库连接:

new Mongo()
new Mongo(<host>)
new Mongo(<host:port>)

考虑下面的示例,该示例实例化到默认端口上本地主机上运行的mongodb实例的新连接,并使用getdb()选择数据库mydatabase为当前数据库:

conn = new Mongo();
db = conn.getDB("myDatabase");

如果连接到强制访问控制的MongoDB实例,则可以使用db.auth()方法进行身份验证。

此外,还可以使用connect()方法连接MongoDB实例。以下示例连接到使用非默认端口27018在本地主机上运行的MongoDB实例,并设置全局DB变量:

> db=connect("localhost:27018")
connecting to: localhost:27018
Implicit session: session { "id" : UUID("4fb851d6-fb74-472f-abb5-68ef675556cf") }
MongoDB server version: 4.0.6
test
> db=connect("localhost:27018/myDatabase")
connecting to: mongodb://localhost:27018/myDatabase
Implicit session: session { "id" : UUID("bb409c38-6ff6-40c9-90b3-bd7bcdaabb60") }
MongoDB server version: 4.0.6
myDatabase

更多请参考:mongo Shell Methods

交互式mongo和脚本式mongo的区别

为Mongo Shell编写脚本时,请考虑以下内容:

  • 设置db全局变量,请使用getdb()方法或connect()方法。可以将数据库引用分配给db以外的变量。
  • 默认在mongo Shell中写操作是{w:1}的,如果想批量操作,请使用Bulk()。具体请参考 Write Method Acknowledgements
  • 不能在javascript文件中使用任何shell帮助程序(例如,use、show dbs等),因为它们不是有效的javascript。
    下表将最常见的MongoShell帮助程序映射到它们的javascript等价物。
Shell Helpers JavaScript Equivalents
show dbs, show databases db.adminCommand(‘listDatabases’)
use db = db.getSiblingDB(’’)
show collections db.getCollectionNames()
show users db.getUsers()
show roles db.getRoles({showBuiltinRoles: true})
show log db.adminCommand({ ‘getLog’ : ‘’ })
show logs db.adminCommand({ ‘getLog’ : ‘*’ })
it cursor = db.collection.find() if ( cursor.hasNext() ){ cursor.next(); }
  • 在交互模式下,mongo打印操作结果,包括所有光标的内容。在脚本中,要么使用javascript print()函数,要么使用mongo特有的print json()函数,该函数返回格式化的json。
    比如,要在mongo shell脚本中打印结果光标中的所有项,请使用以下习惯用法:
 cursor = db.collection.find();
while ( cursor.hasNext() ) {
   printjson( cursor.next() );
}

脚本编写

在系统提示下,使用mongo评估javascript。

– eval option

使用–eval选项mongo向shell传递一个javascript片段,如下所示:

$ mongo test --eval "printjson(db.getCollectionNames())"
MongoDB shell version v4.0.6
connecting to: mongodb://127.0.0.1:27017/test?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("19124a55-be9b-4342-bdb7-af076b4a22f6") }
MongoDB server version: 4.0.6
[ ]

执行JaveScript脚本

  • 方法1:linux shell命令行
$ mongo localhost:27017/test myjsfile.js

此操作在mongo shell中执行myjsfile.js脚本,该脚本连接到可通过端口27017上的localhost接口访问的mongod实例上的测试数据库。

  • 方法2:mongodb shell命令行
> load("myjstest.js")

方法接受相对路径和绝对路径。如果mongo shell的当前工作目录是/data/db,而myjstest.js位于/data/db/scripts目录中,那么mongo shell中的以下调用将是等效的:

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

原文:https://docs.mongodb.com/manual/tutorial/write-scripts-for-the-mongo-shell/

猜你喜欢

转载自blog.csdn.net/zhizhengguan/article/details/88638259
今日推荐