JavaScript 方法
JavaScript methods 可以看作是抽象层。许多方法只是数据库命令的包装器。你可以通过写函数名而不用()来内省方法。
例子:
> db.stats
function (scale) {
return this.runCommand({dbstats:1, scale:scale});
}
一些方法执行多个命令并聚合输出。示例:
> db.printCollectionStats
function () {
var mydb = this;
this.getCollectionNames().forEach(function (z)
{print(z);printjson(mydb.getCollection(z).stats());print("---");});
}
JavaScript 方法与数据库命令
一些方法,如find、update、delete 等。不要调用命令:
> db.coll.find
function (query, fields, limit, skip) {
return new DBQuery(this._mongo, this._db, this, this._fullName, this._massageObject(query), fields, limit, skip);
}
MongoDB wire protocol 为query、insert、update、delete、getmore、killcursors 等指定不同的request opcodes。
可以使用不同的请求操作码来实现命令。然而,MongoDB 作者决定在一个名为$cmd 的特殊集合上将命令实现为常规查询。
runCommand的自省揭示了这一点:
> db.runCommand
function (obj) {
if (typeof obj == "string") {
var n = {};
n[obj] = 1;
obj = n;
}
return this.getCollection("$cmd").findOne(obj);
}
内部命令
有些命令是内部的,并不打算由用户调用。因此,MongoDB shell 中没有提供方便地访问这些命令的方法。
几个例子: