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
}

2 ответов


вы можете получить доступ к сохраненным функциям несколькими способами:

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.


после создания функции с помощью RoboMongo, в текстовом поле команды оболочки введите:

db.loadServerScripts();
myFunctionName();

и нажмите кнопку Execute кнопка на панели инструментов