我在 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);
};
减少:
function(key, values) {
var sum = 0;
values.forEach(function(value) {
sum += value;});
return sum;
};
编辑原始问题:MapReduce 不起作用不再有效。这是一个连接问题,而不是 MapReduce。感谢大家提供额外的信息。
不幸的是,这不起作用并给出了一些输出,如下所示:
{u'_id': {u'value': None}, u'value': 1160856.0}
不能输入整数值吗?我阅读了 Mongodb 上的 map 缩减文档,但找不到与键的数据类型相关的信息。
最佳答案
如果您从 MongoDB shell 运行 map/reduce,您可能会遇到一个功能/问题(意见各不相同;)),其中 shell 将所有整数类型转换为 double 并按此存储它们。目前除了从 shell 以外的其他地方调用 m/r 之外,没有真正的解决方法。也就是说,如果我运行你的 m/r,我会得到这个:
{
"_id" : {
"value" : 1
},
"value" : 3
}
这似乎就是您想要做的。我不确定是不是。确保您运行的是最新的数据库版本等。
关于python - 整数作为 Mongodb 中 MapReduce 的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10086233/