сортировка ключей и отображение в couchdb - PullRequest
2 голосов
/ 26 апреля 2010

Я делаю уменьшенное представление для подсчета заметок пользователей по диапазону дат, и я стою перед совершенно нерешаемой проблемой. Выбор диапазона дат в порядке - я создаю ключ массива [ГГГГ, ММ, ДД, идентификатор_пользователя].

Пример документа:

{
   "_id": "1",
   "_rev": "1-84d3fa5f259c7b30c74028ca60a45f91",
   "body": "note text",
   "user_id": 666,
   "created_at": "Thu Apr 26 13:50:20 +0200 2010",
}

Функция карты:

function(doc){
   var created = new Date(doc.created_at);
   emit([created.getFullYear(),created.getMonth()+1,created.getDate(),doc.user_id],doc);
}

Функция уменьшения:

_count

До этого все в порядке - когда я хочу выбрать все заметки для выбранного диапазона дат, например, с 2010-02-02 по 2010-03-03:

reduce_view_name?startkey=[2010,02,01]&endkey=[2010,02,28,{}]&group_level=0

Легко выбрать суммы заметок / пользователя / дня - я изменяю group_level на 4. Но как насчет количества заметок для выбранного диапазона дат с одной суммой заметок на пользователя? В этом случае я получаю 28 строк на пользователя, но что делать, если у вас 300 пользователей? Это будет 300x28 = 7400 строк (если каждый будет писать каждый день :).

2-й вариант - заменить user_id с последнего места на 1-й, но в этом случае мне нужно знать id_user и сделать выбор для каждого отдельно.

Кто-нибудь знает, как ее решить?:)

1 Ответ

0 голосов
/ 28 мая 2010

Да: добавить другой вид, в котором ключ (из вида карты) инвертирован, чтобы имя пользователя было первым, а дата - после него. Я знаю, что это немного избыточно, но работает как сумасшедший. ;)

...