前言
此篇博文是 Mongdb 基础系列之一;
本文为作者的原创作品,转载需注明出处;
简介
你可以在 mongo shell 中书写 javascript 代码来操控 MongoDB 的数据或者执行一些相关的管理操作;本章节主要是描述如何编写使用 mongo shell 的 javascript 脚本来访问 MongoDB;
建立新的连接
无论是通过 mongo shell 还是通过 JavasSript 文件,你都可以使用 Mongo() 方法来初始化 database connections 实例;像下面这样,(注意,下面所演示的用例在 javascript 或者是 mongo shell 中执行都是可以的)
1 | new Mongo() |
通过 connection,便可以得到对应的 database instance,看下面这个例子,
1 | conn = new Mongo(); |
上面这个例子中,我们通过 Mongo() 方法得到了一个数据库连接conn
,然后通过该链接conn
调用 getDB() 方法得到了一个 database 的 instance myDatabase;如果对 MongDB instance 设置了访问控制( Access Control ),那么就需要调用 db.auth() 方法来进行验证;
另外,你可以直接通过 connect() 方法来直接连接 MongoDB instance;
1 | db = connect("localhost:27020/myDatabase"); |
上面这个例子连接了非默认端口的 MongoDB instance;
Differences Between Interactive and Scripted mongo
通过 mongo shell 来写 javascript,需要考虑如下因素,
- 虽然上面我们通过 getDB() 和 connect() 方法的到的 MongoDB instance 赋值给了变量 db,但是你也可以使用其它的变量来存储;
- Write operations in the mongo shell use a write concern of { w: 1 } by default. If performing bulk operations, use the Bulk() methods. See Write Method Acknowledgements for more information.
- 不能在 JavaScript 文件中使用任何的 shell helper ( 比如,use <dbname>, show dbs 等等 ),因为他们并不是有效的 JavaScript 方法;如果一定要在 JavaScript 中使用 shell helper 命令,可以使用相关的可替代的方法,
- 在 mongo shell 的交互模式中( interactive mode ),mongo 将会自动的输出 cursors 的结果;在 JavaScripts 中使用 print() 或者 printjson() 的方法来输出;
1
2
3
4cursor = db.collection.find();
while ( cursor.hasNext() ) {
printjson( cursor.next() );
}
Scripting
使用 mongo 指令来执行 JavaScript;
–eval option
1 | $ mongo test --eval "printjson(db.getCollectionNames())" |
上面这个例子会试图连接本地 27017 的 MongoDB instance test,并返回其所有的 collection names;
Execute a JavaScript File
可以为 mongo shell 指定一个 .js 文件,使得 mongo 可以直接执行该 JavaScript 文件;
1 | $ mongo localhost:27017/test myjsfile.js |
上述指令会为连接到 localhost:27017 的 MongoDB 实例 test 的 mongo shell 执行 myjsfile.js;上面的指令是显示的指明了 MongDB 的连接信息以及 MongoDB 实例信息,也可以通过下面这种方式,
1 | $ mongo myjsfile.js |
在 myjsfile.js 中通过使用 Mongo() 方法来通过建立新的连接的方式来达到同样的效果;
那么,如果已经进入 mongo shell 命令行,如何执行 JavaScript 文件呢?
1 | > load("myjstest.js") |
上述命令再回在 mongo shell 中执行 myjstest.js 文件;
load() 接收相对和绝对路径来引用 javascript 文件,比如当前 mongo shell 的执行路径是 /data/db,如果该文件夹下面有一个 myjstest.js 文件,那么我们可以使用下面两种方式任意一种来调用该 javascript 文件,
1 | load("scripts/myjstest.js") |