2013-07-15 81 views
10

我试图使用MongoDB的客户端“Robomongo” http://robomongo.org/Robomongo,如何使用自定义函数?

它工作正常,但我不明白如何访问到“功能”一节中创建的功能...

我要测试的MapReduce的功能,所以我创建了一个map()和减少()函数,但是当我在写我的外壳:

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 
} 

回答

19

您可以访问多种方式存储功能:

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。

9

使用RoboMongo, 在shell命令文本框中输入创建功能后:

db.loadServerScripts(); 
myFunctionName(); 

,并单击工具栏中的按钮Execute

相关问题