Много от помощните функции на обвивката не са достъпни за изпълнение на код от страна на сървъра. В случай на printShardingStatus()
, има смисъл, защото няма конзола, която да се използва за отпечатване на изход и предпочитате да имате върнат низ. За щастие, трябва да можете да изтеглите източника на функцията на обвивката и да я внедрите отново във вашето приложение (напр. свързване на върнат низ вместо директно отпечатване).
$ mongo
MongoDB shell version: 2.2.0
connecting to: test
> db.printShardingStatus
function (verbose) {
printShardingStatus(this.getSiblingDB("config"), verbose);
}
И така, нека да разгледаме printShardingStatus()
функция...
> printShardingStatus
function (configDB, verbose) {
if (configDB === undefined) {
configDB = db.getSisterDB("config");
}
var version = configDB.getCollection("version").findOne();
// ...
}
Преди да превърнете всички изходни изрази в конкатенация на низове, бихте искали да се уверите, че всички други DB методи са достъпни за вас. От гледна точка на производителността, мисля, че най-добрият вариант е да пренесете вътрешностите на тази функция към Java и да избегнете напълно JS оценката от страна на сървъра. Ако се потопите по-дълбоко в printShardingStatus()
функция, ще видите, че просто издава find()
в конфигурационната база данни заедно с някои group()
заявки.
Ако все пак искате да се придържате към оценяването на JS и предпочитате да не съхранявате този код във вашето Java приложение, можете също да разгледате съхраняване на JS функции от страна на сървъра .