Сделайте CouchDB уменьшить запрос для одного ключа - PullRequest
2 голосов
/ 07 февраля 2012

У меня есть CouchDB со следующим документом:

{
  "name":"Chris",
  "tags":["mustache", "music", "couchdb"]
}

{
  "name":"Noah",
  "tags":["hypertext", "philosophy", "couchdb"]
}

{
  "name":"Jan",
  "tags":["drums", "bike", "couchdb"]
}

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

function(dude) {
  if(dude.name && dude.tags) {
    dude.tags.forEach(function(tag) {
      emit(tag, 1);
    });
  }
}

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

function(keys, values) {
  return sum(values);
}

Теперь, если я запрашиваюс помощью параметра ?group=true я получаю счетчик для каждого тега:

{"rows":[
{"key":"bike","value":1},
{"key":"couchdb","value":3},
{"key":"drums","value":1},
{"key":"hypertext","value":1},
{"key":"music","value":1},
{"key":"mustache","value":1},
{"key":"philosophy","value":1}
]}

Какой запрос мне следует использовать, чтобы получить значение только "couchdb" в одиночку?

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

Я не могу использовать key = параметр, который действительно является тем, что я хочу, так как он возвращает пустой результат.

Если я запрашиваю ?group=true&startkey="couchdb"&endkey="drums", я получу счетчик только couchdb ,но я не могу использовать startkey = и endkey = , потому что я не знаю, каким будет следующий ключ в работающей БД.

Какие решения вы бы порекомендовали в этомситуация?

1 Ответ

4 голосов
/ 07 февраля 2012

key="couchdb"&group=true должно работать.

У нас есть несколько представлений и запросов в работе, которые работают именно так, и я только что попробовал один из них. Если вы получите пустой результат, возможно, ключ не совсем тот, который вы излучаете. Дважды проверьте, используете ли вы одну строку в качестве ключа (ваша опубликованная функция карты делает это правильно) и есть ли какие-либо различия в заглавных буквах (для уверенности используйте toLowerCase() - что не требуется в вашем примере).

В других ситуациях (любой тег, начинающийся с "couchdb" ), вы можете использовать endkey с высоким символом в конце ( "couchdb \ ufff0" ), но здесь это не поможет.

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