我在Mongodb中有一个如下所示的集合:
{_id: {"thread": "abc"}, "value": 1}
{_id: {"thread": "cdf"}, "value": 1}
{_id: {"thread": "edf"}, "value": 1}
我尝试映射reduce尝试键入值,希望输出如下:
{id_: {"value": 1}, value: 3}
MAP:
function() {
var key = {value : this.value};
emit(key, 1);
};
REDUCE:
function(key, values) {
var sum = 0;
values.forEach(function(value) {
sum += value;});
return sum;
};
编辑原始问题:地图Reduce不起作用不再有效。这是一个连接问题,而不是Map Reduce。感谢大家提供的额外信息。
不幸的是,这不起作用,并给出了一些输出如下:
{u'_id': {u'value': None}, u'value': 1160856.0}
是不是可以键入整数值?我在Mongodb上阅读了map reduce文档,但找不到与key数据类型相关的信息。
答案 0 :(得分:3)
如果您正在运行MongoDB shell中的map / reduce,那么您可能会遇到一个功能/问题(意见各不相同;))其中shell将所有整数类型转换为double并将其存储为原样。除了从shell以外的东西调用你的m / r之外,目前还没有真正的解决方法。也就是说,如果我运行你的m / r我得到这个:
{
"_id" : {
"value" : 1
},
"value" : 3
}
这似乎是你想要做的。我不确定是不是。确保您运行的是最新的db版本等。