2

我在 Mongodb 中有一个集合,如下所示:

{_id: {"thread": "abc"}, "value": 1}
{_id: {"thread": "cdf"}, "value": 1}
{_id: {"thread": "edf"}, "value": 1}

我尝试映射reduce,尝试键入值,希望输出如下:

{id_: {"value": 1}, value: 3}

地图:

function() {
var key = {value : this.value};
emit(key, 1);
};

减少:

function(key, values) {
var sum = 0;
values.forEach(function(value) {
sum += value;});
return sum;
};

编辑原始问题: Map Reduce 不起作用不再有效。这是一个连接问题,而不是 Map Reduce。感谢大家提供额外的信息。

不幸的是,这不起作用,并给出了一些输出,如下所示:

{u'_id': {u'value': None}, u'value': 1160856.0}

不能键入整数值吗?我阅读了 Mongodb 上的 map reduce 文档,但找不到与键的数据类型相关的信息。

4

1 回答 1

3

如果你从 MongoDB shell 运行你的 map/reduce,你可能会遇到一个特性/问题(对此有不同的看法;)),其中 shell 将所有整数类型转换为双精度并存储它们。除了从 shell 之外的其他东西调用你的 m/r 之外,目前没有真正的解决方法。也就是说,如果我运行你的 m/r,我会得到这个:

{
        "_id" : {
                "value" : 1
        },
        "value" : 3
}

这似乎是你想要做的。我不确定是不是。确保您正在运行最新的数据库版本等。

于 2012-04-10T09:52:35.427 回答