Сортировка по дате после запроса по нескольким конкретным ключам - PullRequest
3 голосов
/ 08 ноября 2010

Структура документа:

{
  "Type":"post"
  "LastModified":"2010-11-01 21:55",
  "CategoryID":3,
  "ID":12
}

Замечательно иметь кучу разных пост-документов в разных категориях.Но я не могу понять, как создать представление, которое возвращает документы, упорядоченные по дате, при выборе документов, например, в категориях 3 и 5. Категории неизвестны, запрос лимита должен работать по-прежнему.

Я пробовал разные подходы к представлению, но ничто не приблизилось к достижению желаемого результата.

В SQL это, вероятно, можно сделать примерно так:

SELECT * FROM document WHERE document.CategoryID in (3,5) ORDER BY document.LastModified DESC;

Я мог бы просто запросить такое представление требуемое количество раз, вручную отсортировав данные и разбив их на страницы:

function(doc) {
  emit(doc.CategoryID, doc.ID);
}

Так кто-нибудь знает, возможно ли избежать этого и просто сделать couchdb немного умнее?

1 Ответ

5 голосов
/ 10 ноября 2010

Я могу придумать 2 возможных решения.

  1. Издает оба значения CategoryID и LastModified в функции карты.

    function(doc) {
        emit([doc.CategoryID, doc.LastModified], null);
    }
    

    Теперь вы можете запросить представление для ?startkey=[3]&endkey=[3, {}], чтобы получить все документы с CategoryID=3, отсортированным по LastModified. Чтобы получить документы для нескольких CategoryID, вам нужно объединить отсортированные результаты.

  2. Используйте couchdb-lucene для построения индекса. couchdb-lucene может обрабатывать сложные запросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...