Robomongo, как использовать пользовательские функции?
Я пытаюсь использовать клиент mongodb "Robomongo" http://robomongo.org/
Он отлично работает, но я не понимаю, как получить доступ к функциям, созданным в разделе "функции"...
Я хочу проверить функциональность mapReduce, поэтому я создал функцию map() и reduce(), но когда я пишу в своей оболочке:
db.<name_of_collection>.mapReduce(map, reduce, {out: {inline: 1}});
Robomongo сообщит мне следующую ошибку:
ReferenceError: map is not defined (shell):1
Я также пробовал вот так:
db.<collection_name>.mapReduce(db.system.js.map, db.system.js.reduce, {out: {inline: 1}});
Но опять-таки что-то кажется неправильным...
uncaught exception: map reduce failed:{
"errmsg" : "exception: JavaScript execution failed: ReferenceError: learn is not defined",
"code" : 16722,
"ok" : 0
}
Ответы
Ответ 1
Доступ к хранимым функциям можно получить несколькими способами:
1)
db.collection.mapReduce(
"function() { return map(); }",
"function(key, values) { return reduce(key, values); }",
{out: {inline: 1}});
2)
db.collection.mapReduce(
function() { return map(); },
function(key, values) { return reduce(key, values); },
{out: {inline: 1}});
Обратите внимание, что мы теперь используем функции, а не строки, как в 1)
3)
Если вы используете MongoDB 2.1 или выше, вы можете сделать:
db.loadServerScripts();
db.collection.mapReduce(
map,
reduce,
{out: {inline: 1}});
Подробнее об этом:
http://docs.mongodb.org/manual/tutorial/store-javascript-function-on-server/
Robomongo использует тот же движок, который используется оболочкой MongoDB. Ваши вопросы касаются MongoDB, а не Robomongo.
Ответ 2
После создания функции с помощью RoboMongo
,
в текстовом поле команды оболочки введите:
db.loadServerScripts();
myFunctionName();
и нажмите кнопку Execute
на панели инструментов