1

我正在尝试使用 mapreduce,但由于某种原因它会将整数转换为浮点数。

地图:

function() {
    emit(this._id.p, 1);
}

减少:

function(key, values) {
    var total = 0;
    for(var i = 0; i < values.length; i++) {
        total += values[i];
    }
    return total;
}

我得到这样的输出:

[
    {u'_id': 1.0, u'value': 6.0}, 
    {u'_id': 2.0, u'value': 6.0}, 
    {u'_id': 3.0, u'value': 5.0}, 
    {u'_id': 4.0, u'value': 6.0}, 
    {u'_id': 5.0, u'value': 3.0}, 
    {u'_id': 6.0, u'value': 6.0},
    **snip**
]
4

1 回答 1

3

Javascript 没有“整数”的概念,所有数字都是浮点数。因此,您的emit(this._id.p, 1)声明正在发出 float 1.0。MongoDB 为 Javascript 解释器提供了一个NumberIntandNumberLong类来解决这个问题。

试试emit(this._id.p, NumberInt(1))吧。

于 2012-09-19T17:31:25.217 回答