2015-11-02 76 views
1

我有一個房地產集合,我運行地圖減少mongodb來計算一些基本的統計數據。一切工作正常,但當我在mongohq上運行任務時,我得到了遞歸結果。地圖減少mongodb返回遞歸結果

讓我簡化事情有點,而不是真正的減少FN,說減少是:

function(key, values) { 
    return { values: values }; 
} 

地圖功能:

function() { 
    emit('price', this.price); 
} 

當我在本地運行的任務,輸出是這樣的:

{ 
    "values": [ 
    1024.1712707182319, 
    661.0377201728149, 
    651.5957446808511, 
    1553.7073816617014, 
    1128.664171911323 
    ] 
} 

現在有趣的部分,當我在生產db上運行它時,輸出如下所示:

{ 
    "values": [ 
    { 
     "values": [ 
     { 
      "values": [ 
      1561.5615615615618, 
      1026.2054507337525, 
      1428.5714285714287 
      ] 
     }, 
     1092.1177587844254, 
     1040.2010050251256, 
     1547.6190476190477 
     ] 
    } 
    ] 
} 

任何想法這裏有什麼可能是錯的?

回答

2

罪魁禍首可能是你的reduce函數。

https://docs.mongodb.org/manual/reference/command/mapReduce/#dbcmd.mapReduce

精簡函數必須是冪等。確保下面的語句是正確的:

reduce(key, [ reduce(key, valuesArray) ]) == reduce(key, valuesArray) 

精簡函數應該是可交換的:那就是,在valuesArray元素的順序不應該影響減少函數的輸出,從而使下面的語句是正確的:

reduce(key, [ A, B ]) == reduce(key, [ B, A ]) 

希望這有助於

+1

非常感謝。我認爲這是問題。不過,一旦我確認,我會接受你的回答。猜猜我必須以它返回一個對象(散列基本上)的方式編寫reduce,並且是冪等的。 – rodic