我正在尝试使用mongodb客户端“Robomongo”http://robomongo.org/
它工作正常,但我无法理解如何访问在“函数”部分创建的函数...
我想测试mapReduce功能,所以我创建了map()和reduce()函数,但是当我在shell上编写时:
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
}
答案 0 :(得分:20)
您可以通过多种方式访问存储的功能:
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 shell使用的相同引擎。你的问题是关于MongoDB,而不是Robomongo。
答案 1 :(得分:10)
使用RoboMongo
创建函数后,
在shell命令文本框中输入:
db.loadServerScripts();
myFunctionName();
然后点击工具栏中的Execute
按钮