シェルのヘルパー関数の多くは、サーバー側のコード実行には使用できません。 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関数のサーバー側への保存 。