@bassstorm

CouchDB: выборка map/reduce по временному промежутку и дополнительным ключам

В базе хранятся документы следующего вида:

{
    "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);
}

Хочется уйти от необходимости многократного вызова базы и свести всё дело к одному запросу.

  • Вопрос задан
  • 2669 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы