ejb*_*boy 4 mongodb mongodb-java
在这个问题中,我指的是数据库命令和JavaScript方法.
我想知道为什么MongoDB对命令和方法有两组不同的操作.首先我虽然这些命令是JavaScript中可用的操作的子集,但后来我意识到有像filemd5这样的命令没有[直接]作为方法可用.
我的问题是为什么命令和方法之间存在区别,以及为什么它们不能简单地是具有不同表示的同一组操作.命令1更适合声明性操作(例如通过REST提供),第二个适用于DB脚本.
Ben*_*gel 10
的JavaScript方法可以被看作是抽象层.许多方法只是数据库命令的包装器.您可以通过仅编写函数名称来反省方法().
例:
> db.stats
function (scale) {
return this.runCommand({dbstats:1, scale:scale});
}
Run Code Online (Sandbox Code Playgroud)
某些方法执行多个命令并聚合输出.例:
> db.printCollectionStats
function () {
var mydb = this;
this.getCollectionNames().forEach(function (z)
{print(z);printjson(mydb.getCollection(z).stats());print("---");});
}
Run Code Online (Sandbox Code Playgroud)
一些方法,如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);
}
Run Code Online (Sandbox Code Playgroud)
的MongoDB的有线协议指定不同请求的操作码为query,insert,update,delete, getmore,killcursors等.
可以使用不同的请求操作码实现命令.但是,MongoDB作者决定在一个名为的特殊集合上实现命令作为常规查询$cmd.
内省runCommand揭示了它:
> db.runCommand
function (obj) {
if (typeof obj == "string") {
var n = {};
n[obj] = 1;
obj = n;
}
return this.getCollection("$cmd").findOne(obj);
}
Run Code Online (Sandbox Code Playgroud)
某些命令是内部的,不打算由用户调用.因此,MongoDB shell中没有提供方法来方便地访问这些命令.
几个例子:
| 归档时间: |
|
| 查看次数: |
1262 次 |
| 最近记录: |