我有幾個我正在運行mapreduce的Mongoid模型,並且我想將統一結果存儲在一個單一的daily_stats
集合中。我的地圖&減少功能正常工作的所有3種型號,但通過collection.mapreduce(map, reduce, {:out => "daily_stats", :raw => true})
輸出甚至當,隨後地圖的結果減少操作覆蓋以前的結果,即使它不具有重疊鍵:在MongoDB中共享mapreduce結果集合
{'_id': "2012-06-01", 'values': {photos: 10}}
{'_id': "2012-06-02", 'values': {photos: 10}}
值photos
拋出了當後續通返回:
{'_id': "2012-06-01", 'values': {comments: 1}}
{'_id': "2012-06-02", 'values': {comments: 6}}
我試着用collection.mapreduce(map, reduce, {:out => {:merge => "daily_stats"}, :raw => true})
也合併,但似乎沒有任何工作。
任何想法?
UPDATE
地圖&減少功能是這樣的每個模型:
地圖:
function() {
day = Date.UTC(this.created_at.getFullYear(), this.created_at.getMonth(), this.created_at.getDate());
emit(day, {users: 1});
};
減少: 功能(鍵,值){ VAR users_added_count = 0;
values.forEach(function(v) {
users_added_count += parseInt(v['users']) || 0;
});
return {users: users_added_count};
}
下面是關於生成的架構的一些額外的信息:
{ "_id" : 1337040000000,
"value" : {
"apartments" : 280,
"price" : 1003653,
"photos" : 83,
"comments" : 0 }
}
有什麼原因,你沒有和/或不能運行圖減少一次,併發出一個單一的文件,即:發射(日,{users:1},{photos:1},{comments:1})? – Jenna
哦,我明白了。您最初有三個獨立的集合 - 一個用於用戶,照片和評論?我將寫一個示例來說明合併數據的方式。 – Jenna
或者是來自「結果模式」的文檔您的輸入數據模型?對不起,澄清一下,你能提供更多的數據例子嗎? – Jenna