Давайте есть файл "error_test.js", который содержит:Как обнаружить ошибку в MapReduce
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)'
То же самое происходит, если мы используем «db.doEval (my_js)» метод в Java, и мы помещаем содержимое файла «error_test.js» в переменную «my_js»: Ошибка отображения карты не обнаружена (исключение excepcion не возвращается, не возвращается нулевое значение, «ok: 1.0» появляется в ответе).
Так что мой вопрос: как я могу обнаружить ошибку в mapreduce? (Как в файле JS и в методе doEval())
Спасибо
вы можете поместить это в попытке поймать блока или делать все, что вы хотите, когда вы обнаружили ошибку - в том числе возвращения код ошибки ... –
Спасибо, это работает. Я не знал, что «db.runCommand()» возвращает значение (json doc). Фактически, я вижу, что на приведенных ниже страницах руководства нет упоминания о возвращаемом значении: 1) db.runCommand(): http://docs.mongodb.org/manual/reference/method/ db.runCommand/ 2) mongo Shell Methods: http://docs.mongodb.org/manual/reference/method/ Возможно, есть упоминание на некоторых других страницах, но я их не нашел. Если какой-либо веб-редактор mongo читает этот комментарий, добавьте некоторую информацию о возвращаемом значении на эти страницы. спасибо – freesoft