Viele der Hilfsfunktionen der Shell sind für die serverseitige Codeausführung nicht verfügbar. Im Fall von printShardingStatus()
, ist dies sinnvoll, da es keine Konsole zum Drucken der Ausgabe gibt und Sie lieber eine Zeichenfolge zurückgeben möchten. Glücklicherweise sollten Sie in der Lage sein, die Quelle der Shell-Funktion aufzurufen und sie in Ihrer Anwendung neu zu implementieren (z. B. eine zurückgegebene Zeichenfolge zu verketten, anstatt sie direkt zu drucken).
$ mongo
MongoDB shell version: 2.2.0
connecting to: test
> db.printShardingStatus
function (verbose) {
printShardingStatus(this.getSiblingDB("config"), verbose);
}
Schauen wir uns also den printShardingStatus()
an Funktion...
> printShardingStatus
function (configDB, verbose) {
if (configDB === undefined) {
configDB = db.getSisterDB("config");
}
var version = configDB.getCollection("version").findOne();
// ...
}
Bevor Sie alle Ausgabeanweisungen in eine Zeichenfolgenverkettung umwandeln, sollten Sie sicherstellen, dass Ihnen alle anderen DB-Methoden zur Verfügung stehen. In Bezug auf die Leistung denke ich, dass die beste Option darin besteht, die Innereien dieser Funktion nach Java zu portieren und die serverseitige JS-Evaluierung insgesamt zu vermeiden. Wenn Sie tiefer in den printShardingStatus()
eintauchen -Funktion sehen Sie, dass sie nur find()
ausgibt in der Konfigurationsdatenbank zusammen mit einigen group()
Abfragen.
Wenn Sie bei der Evaluierung von JS bleiben und diesen Code lieber nicht in Ihrer Java-Anwendung behalten möchten, können Sie sich auch JS-Funktionen serverseitig speichern .