daily_stats
mapreduce を実行している複数の Mongoid モデルがあり、統合された結果を 1 つのコレクションに格納したいと考えています。私の map & reduce 関数は 3 つのモデルすべてで正常に動作しますが、 を介して出力する場合でも、collection.mapreduce(map, reduce, {:out => "daily_stats", :raw => true})
後続の map reduce 操作の結果は、重複するキーがない場合でも、以前の結果を上書きします。
{'_id': "2012-06-01", 'values': {photos: 10}}
{'_id': "2012-06-02", 'values': {photos: 10}}
photos
後続のパスが返されたときにスローされる getの値:
{'_id': "2012-06-01", 'values': {comments: 1}}
{'_id': "2012-06-02", 'values': {comments: 6}}
とのマージも試みましcollection.mapreduce(map, reduce, {:out => {:merge => "daily_stats"}, :raw => true})
たが、それもうまくいかないようです。
何か案は?
アップデート
map & reduce 関数は、各モデルで次のようになります。
地図:
function() {
day = Date.UTC(this.created_at.getFullYear(), this.created_at.getMonth(), this.created_at.getDate());
emit(day, {users: 1});
};
Reduce: 関数 (キー、値) { 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 }
}