CouchDB просмотр запроса с несколькими значениями ключа - PullRequest
6 голосов
/ 06 апреля 2011

В настоящее время я пытаюсь создать представление и запрос, чтобы соответствовать этому запросу SQL:

SELECT * FROM articles
WHERE articles.location="NY" OR articles.location="CA"
ORDER BY articles.release_date DESC

Я попытался создать представление со сложным ключом:

function(doc) { 
  if(doc.type == "Article") { 
    emit([doc.location, doc.release_date], doc) 
  }
}

И затемиспользуя startkey и endkey для извлечения одного местоположения и упорядочения результата в дату выпуска.

.../_view/articles?startkey=["NY", {}]&endkey=["NY"]&limit=5&descending=true

Это прекрасно работает.

Однако,Как я могу отправить несколько начальных и конечных клавиш на мой взгляд, чтобы имитировать

WHERE articles.location="NY" OR articles.location="CA"?

Ответы [ 2 ]

7 голосов
/ 07 апреля 2011

Мой заклятый враг, Доминик, прав.

Кроме того, невозможно выполнить запрос по критериям A, а затем отсортировать по критериям B в CouchDB. В обмен на это неудобство CouchDB гарантирует масштабируемое, надежное и логарифмическое время запросов. У вас есть выбор.

  • Сохраните выходные данные вида в своей собственной базе данных и создайте новое представление для сортировки по критериям B
  • или , затем сортируйте строки, которые могут быть
    • Сортировка на стороне клиента после получения строк
    • Сортировка на стороне сервера в функции _list. Это здорово, но помните, что это не в конечном итоге масштабируемым. Если у вас миллионы строк, функция _list, вероятно, завершится сбоем.
5 голосов
/ 06 апреля 2011

Краткий ответ: в настоящее время не может использовать несколько комбинаций начальная / конечная клавиши.

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

Это возможно возможноиспользовать несколько key параметров в запросе.См. Документацию Couchbase CouchDB по извлечению нескольких документов .

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