Wiele funkcji pomocniczych powłoki nie jest dostępnych do wykonania kodu po stronie serwera. W przypadku printShardingStatus()
, ma to sens, ponieważ nie ma konsoli, której można by użyć do drukowania danych wyjściowych, a raczej wolałbyś zwracać ciąg znaków. Na szczęście powinieneś być w stanie pobrać źródło funkcji powłoki i ponownie zaimplementować je w swojej aplikacji (np. łącząc zwrócony ciąg znaków zamiast bezpośrednio drukować).
$ mongo
MongoDB shell version: 2.2.0
connecting to: test
> db.printShardingStatus
function (verbose) {
printShardingStatus(this.getSiblingDB("config"), verbose);
}
Spójrzmy więc na printShardingStatus()
funkcja...
> printShardingStatus
function (configDB, verbose) {
if (configDB === undefined) {
configDB = db.getSisterDB("config");
}
var version = configDB.getCollection("version").findOne();
// ...
}
Przed przekształceniem wszystkich instrukcji wyjściowych w konkatenację ciągów, chciałbyś się upewnić, że wszystkie inne metody DB są dla Ciebie dostępne. Jeśli chodzi o wydajność, myślę, że najlepszą opcją jest przeniesienie wnętrza tej funkcji do Javy i całkowite uniknięcie oceny JS po stronie serwera. Jeśli zagłębisz się w printShardingStatus()
funkcja, zobaczysz, że po prostu wydaje find()
w bazie danych konfiguracji wraz z niektórymi group()
zapytania.
Jeśli chcesz pozostać przy ocenianiu JS i nie chcesz trzymać tego kodu w swojej aplikacji Java, możesz również zajrzeć do przechowywanie funkcji JS po stronie serwera .