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 インタープリターにNumberIntandクラスを提供します。NumberLong

emit(this._id.p, NumberInt(1))代わりに試してください。

于 2012-09-19T17:31:25.217 に答える