Java コード内でシャーディングした後、チャンクのリストを取得する必要があります。私のコードはシンプルで、次のようになります。
Mongo m = new Mongo( "localhost" , 27017 );
DB db = m.getDB( "admin" );
Object cr = db.eval("db.printShardingStatus()", 1);
eval() の呼び出しはエラーを返します:
Exception in thread "main" com.mongodb.CommandResult$CommandFailure: command failed [$eval]: { "serverUsed" : "localhost/127.0.0.1:27017" , "errno" : -3.0 , "errmsg" : "invoke failed: JS Error: ReferenceError: printShardingStatus is not defined src/mongo/shell/db.js:891" , "ok" : 0.0}
at com.mongodb.CommandResult.getException(CommandResult.java:88)
at com.mongodb.CommandResult.throwOnError(CommandResult.java:134)
at com.mongodb.DB.eval(DB.java:340)
at org.sm.mongodb.MongoTest.main(MongoTest.java:35)
実際、db.js のコードを調べると、891 行目に、ファイル内で定義されていないメソッド printShardingStatus() への呼び出しがあります。utils_sh.js ファイルの sh.status() メソッド内には、コメントもあります。
// TODO: 実際のコマンドをここに移動します
これらのコマンドをmongoコマンドラインで実行すると、すべてが正常に機能します。
私の質問は次のとおりです。
- Java コード内で完全なシャーディング ステータスを取得する可能性は他にありますか? (例: DB.command() メソッドを使用)
- そうでない場合、私の問題を回避するための他の提案はありますか?