Ограничены ли фильтры CouchDB каналом _changes? - PullRequest
2 голосов
/ 29 января 2012

Как указано здесь , фильтр можно использовать с фидом _changes следующим образом:

curl "$HOST/db/_changes?filter=app/important"

Теперь я пытаюсь использовать этот шаблон со стандартным доступом к представлению, например:

curl -X GET $HOST/db/_design/live_data/_view/all-comments&filter=live_data/bytag?tag=testing

Я тоже пробовал?вместо &:

curl -X GET $HOST/db/_design/live_data/_view/all-comments?filter=live_data/bytag?tag=testing

Но фильтр не действует: показываются все документы, даже те, которые не должны проверяться фильтром.

Я использую фильтр:

function(doc, req)
{
  for( var i in doc.tags ) {
    if(doc.tags[i] == req.query.tag) {
      return true;
    }
  }
  return false;
}
  • Что-то не так в вызовах curl?
  • Можно ли вообще использовать представления вместе с фильтрами или фильтры ограничены фидом _changes?Я не видел примеров фильтров, кроме связанных с _changes

Ответы [ 2 ]

1 голос
/ 02 декабря 2013

Если это сработает, это наложит на CouchDB ответственность за итерацию всех записей view и выполнение для них функции filter . Это не очень хороший способ, особенно если у вас есть возможность предварительно индексировать документы, используя представления и массивы ключей (например, [date, tag]).

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

1 голос
/ 29 января 2012

Да, похоже, что фильтры ограничены только запросами _changes.Если вы хотите фильтровать данные из представлений, вы можете использовать параметры «startkey» и «endkey» с возможно более сложными ключами json и / или уменьшить уровни группировки для достижения желаемых результатов.

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