MongoDB:如何在MongoDB Shell上调试Map/Reduce

10

我是MongoDB的新手,我正在使用map/reduce。请问在使用map/reduce时如何进行调试?我已经使用了"print()"函数,但在MongoDB shell上没有任何输出。以下是我的reduce函数:

    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个回答

20

看起来在reduce函数中的print()语句是写入日志文件而不是输出到shell控制台。因此,请查看您的日志文件以获取调试输出。

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


5
Linux中的日志文件位于/var/log/mongodb/mongodb.log。 - Dennis Y.
Mac OS:/usr/local/var/log/mongodb/mongo.log,我仍然无法在日志文件中看到任何内容。 - Lucas Lazaro
2
tail -f /usr/local/var/log/mongodb/mongo.log 对我来说非常有效。在 reduce 函数中调用的 print("some debug text") 输出到此文件。确保您的 mongo 正在将日志写入此文件。也许您已经覆盖了它。检查您的 mongo 配置文件 (/usr/local/etc/mongod.conf)。 - ecdeveloper
上述位置在Mac OS上对我无效。最好使用--logpath标志并添加自己的文件。这样使用print()时可以看到输出结果。 - dmo

4

1
请将以下关于编程的内容从英文翻译成中文。请提供已翻译的文本,不要只提供链接。您的答案应为独立的内容。 - Shiplu Mokaddim
请阅读"如何撰写一个好的回答?" - Scott Solmer
你的调试器很棒!谢谢 :-) - Fred

3
这是关于mongodb网站上的专门页面,可以解决您的问题:http://www.mongodb.org/display/DOCS/Troubleshooting+MapReduce 显然,你的reduce函数是错误的:result.count++这一行最终会包含在values数组中包含的元素数,而这对map reduce模式来说没有任何意义。你的reduce函数只是随机返回一个主机名(因为在任何步骤上mapreduce算法都不能预测reduce内容)和一个随机数。
你能解释一下你想做什么吗? (我猜你想按主机统计某种东西的数量)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接