2012-09-19 73 views
1

我試圖使用mapreduce,但由於某些原因它將整數轉換爲浮點數。PyMongo 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** 
] 

回答

2

JavaScript沒有 「整」,所有數字的概念是花車。所以你的emit(this._id.p, 1)聲明發布了float 1.0。 MongoDB向Javascript解釋器提供了一個NumberIntNumberLong類來解決這個問題。

嘗試用emit(this._id.p, NumberInt(1))代替。