我是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上没有打印任何内容。我还有什么要调试的吗?
由于
答案 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内容都是不可预测的)和一个随机数。
你能解释一下你想做什么吗? (我的猜测是你想要计算每个主机的“东西”数量)