Många av skalets hjälpfunktioner är inte tillgängliga för exekvering av kod på serversidan. I fallet printShardingStatus()
, det är vettigt eftersom det inte finns en konsol att använda för utskrift och du hellre vill ha en sträng returnerad. Tack och lov borde du kunna dra upp källan till skalfunktionen och implementera den på nytt i din applikation (t.ex. sammanfoga en returnerad sträng istället för att skriva ut direkt).
$ mongo
MongoDB shell version: 2.2.0
connecting to: test
> db.printShardingStatus
function (verbose) {
printShardingStatus(this.getSiblingDB("config"), verbose);
}
Så låt oss titta på printShardingStatus()
funktion...
> printShardingStatus
function (configDB, verbose) {
if (configDB === undefined) {
configDB = db.getSisterDB("config");
}
var version = configDB.getCollection("version").findOne();
// ...
}
Innan du omvandlar alla utdatasatser till strängsammansättning, vill du se till att alla andra DB-metoder är tillgängliga för dig. Prestandamässigt tror jag att det bästa alternativet är att porta insidan av denna funktion till Java och undvika JS-utvärdering på serversidan helt och hållet. Om du dyker djupare in i printShardingStatus()
funktion, kommer du att se att det bara utfärdar find()
på konfigurationsdatabasen tillsammans med någon group()
frågor.
Om du vill hålla fast vid att utvärdera JS och hellre inte vill behålla den här koden i din Java-applikation kan du också titta på lagring av JS-funktioner på serversidan .