mongodb:如何在mongodb shell上调试map / reduce

时间:2011-09-23 09:48:44

标签: debugging shell mongodb mapreduce

我是MongoDB的新手,我正在使用map / reduce。 有人可以告诉我如何使用map / reduce进行调试吗?我使用“print()”函数,但在MongoDB shell上,没有打印任何内容。以下是我的减少功能:

    var reduce = function(key, values){
        var result = {count: 0, host: ""};

        for(var i in values){
        result.count++;
        result.host = values[i].host;
        print(key+" : "+values[i]);
        }
        return result;
    }

当我在shell上编写上述函数并在完成后按Enter键时,shell上没有打印任何内容。我还有什么要调试的吗?

由于

3 个答案:

答案 0 :(得分:20)

似乎reduce函数中的print()语句被写入日志文件而不是shell。因此,请检查日志文件以获取调试输出。

您可以在启动mongod进程时使用--logpath D:\path\to\log.txt参数指定日志文件。

答案 1 :(得分:4)

看看这个简单的在线MongoDB MapReduce调试器,它允许在样本数据上获得聚合结果,并在浏览器开发环境中逐步调试Map / Reduce / Finalize函数。

我希望它会有用。

http://targetprocess.github.io/mongo-mapreduce-debug-online/

答案 2 :(得分:3)

mongodb网站上有一个专门的页面,您的答案是:http://www.mongodb.org/display/DOCS/Troubleshooting+MapReduce

显然你的reduce是错误的:行result.count ++最终将包含数组值中包含的元素数量(在map reduce范例中)并不意味着什么。 你的reduce函数只是返回一个“随机”主机名(因为mapreduce算法在任何一步的reduce内容都是不可预测的)和一个随机数。

你能解释一下你想做什么吗? (我的猜测是你想要计算每个主机的“东西”数量)