В базе хранятся документы следующего вида:
{
"user_id": 1,
"event_id": 2,
"event_dt": [
2013, 11, 15, 10, 0, 0, 0
]
}
Хочется с использованием map/reduce получить ответ на вопрос: сколько событий каждого типа произошло для определённого пользователя в заданный промежуток времени.
Единственное решение, которое пока вижу, заключается в использовании двух view и существенной поддержки со стороны кода приложения.
Сначала выбираем все события пользователя в заданный промежуток времени. При этом выбирать, разумеется, придётся постранично (нужна своя реализация с использованием
limit=XXX
), потому как промежуток времени может быть вплоть до года.
function map(doc) {
emit([doc.user_id, doc.event_dt], doc.event_id);
}
Затем для каждого пользовательского события запрашиваем количество его вхождений в тот же самый заданный промежуток времени (
group_level=2
):
function map(doc) {
emit([doc.user_id, doc.event_id, doc.event_dt], 1);
}
Хочется уйти от необходимости многократного вызова базы и свести всё дело к одному запросу.