Map / Reduce в CouchDB с несколькими параметрами? - PullRequest
3 голосов
/ 06 сентября 2010

Мне интересно, как использовать карту / уменьшение CouchDB с несколькими параметрами.Например, если у меня есть команды, в которых есть игроки с возрастом и полом, я предполагаю, что я сделал бы это для своей функции карты:

"function(doc){
  if(doc.team_name) {
    emit(doc.team_name, doc);
  }
}"

Однако я не уверен, как написать функцию сокращения, чтобы получить самые старыемужской игрок в команде или самая молодая женщина или любой другой произвольный запрос.Могу ли я передать параметры в URL или мне нужно написать несколько представлений?

Заранее спасибо,
Бен

1 Ответ

5 голосов
/ 07 сентября 2010

Функция уменьшения имеет немного другое назначение. Функция Reduce группирует некоторые значения для всех документов, которые она обрабатывает. Так вы можете, например, сумма зарплат игроков, или возраст, или считать их.

Если вы хотите получить самого старого игрока в команде, просто установите ключ emit для функции [team, age]. Вид всегда сортируется по ключу.

function(doc) {
  if (doc.team_name) {
    emit([doc.team_name, doc.age], doc);
  }
}

теперь просто запросите ваше мнение. Добавьте параметр descending=true, чтобы самый старый игрок был первым. По умолчанию порядок просмотра возрастает. Если вы хотите, чтобы игроки в определенной команде (все еще отсортированы по возрасту), добавьте параметры: startkey=[<team>, 999]&endkey=[<team>,0]&descending=true

...