Это не очень сложно:
map = function() {
emit({key : this.buyer.state, value : order_value})
}
reduce = function(key,values) {
sum = 0;
values.forEach( function(o) {
sum += o
}
return sum
}
и затем вы уменьшаете свою коллекцию с помощью запроса {date: {$ gt: {[сегодня минус 30 дней]}}
(Я не помню синтаксис, но вы должны превосходно документировать mapreduce на сайте mongodb).
Чтобы более эффективно использовать уменьшение карты, подумайте с постепенным уменьшением карты , сделав запрос сначала за последние 30 дней, а затем снова уменьшите (постепенно) фильтрацию карты от -60 до -30 дней, чтобы получить информацию о Последние дни. Наконец, запустите инкрементную карту, чтобы уменьшить фильтрацию от -60 до -90 дней, чтобы получить последние 90 дней.
Это неплохо, потому что у вас есть 3 запроса, но вы только пересчитываете агрегацию для данных, которых у вас еще нет.
Я могу привести пример, но вы должны сделать это сами.