以下を含む「error_test.js」ファイルを用意しましょう。
db = db.getMongo().getDB( "mydb" );
db.mycol.insert( { hello : "world" } );
print("it is shown");
db.runCommand(
{
mapReduce: "mycol",
map: function(){ print(not_exists); },
reduce: function(key, values){},
out: { replace: "myrescol" }
}
);
print("it is shown too (after error in mapreduce!)");
ファイルを (Windows コマンド ラインで) 実行すると、次のようになります。
mypath>mongo error_test.js
MongoDB shell version: 2.4.0
connecting to: test
it is shown
it is shown too (after error in mapreduce!)
mypath>echo %errorlevel%
0
mypath>
したがって、次のように推測できます。
- mapreduce エラーは実行を停止しません。
- mapreduce エラーはユーザーに表示されません。
- mapreduce エラーは終了コード (0 = 成功) に変換されません (したがって、呼び出し元プログラムはエラーを検出できません)。
エラーを知る唯一の方法は、「mongod.log」で次の行を探すことです。
Wed Jun 12 10:02:37.393 [conn14] JavaScript execution failed: ReferenceError: not_exists is not defined near '(){ print(not_exists)'
Java で「db.doEval(my_js)」メソッドを使用し、「error_test.js」ファイルの内容を「my_js」変数に入れると、同じことが起こります: mapreduce エラーは検出されません (例外は起動されず、null はありません)値が返された場合、「ok : 1.0」が応答に表示されます)。
だから私の質問は: mapreduce でエラーを検出するにはどうすればよいですか? (js ファイルと doEval() メソッドの両方)
ありがとうございました