Исключение проектных документов в запросе _all_docs в Cloudant

Я хочу получить все документы, кроме проектных, но _all_docs возвращает все документы в БД. Из ответов я обнаружил, что использование двух запросов даст результаты.

  1. _all_docs? endkey = "_" - перечисляет документы до первого документа дизайна
  2. _all_docs?startkey="design_\uffff" - выводит список документов после документов дизайна

Это не работает, если документ, следующий за документами проекта, имеет _id "``test". Это дает документы, имеющие _id, начинающийся с маленьких букв. ASCII для _ равен 95, а для обратного тика - 96. Маленькие буквы начинаются с 97. Поэтому можно ли изменить приведенный выше запрос на: _all_docs? Startkey="`"

1 ответ

Решение

Вы совершенно правы, что _all_docs конечная точка возвращает проектные документы. Поскольку символ _ находится между цифрами + заглавными буквами и строчными буквами, проектные документы появляются непосредственно перед документами, начинающимися со строчной буквы (или обратного галочка в вашем примере).

Это оставляет вам два варианта:

1) Сделайте два вызова _all_docs: GET /mydb/_all_docs?endkey="_" & GET /mydb/_all_docs?startkey=""получить документы" с обеих сторон "проектных документов 2) или, создайте новое представление MapReduce. Поскольку представления MapReduce не индексируют проектные документы, это позволяет получить список всех ваших документов (за исключением документов проектирования) в один запрос.

Функция карты может быть такой же простой, как

function(doc) {
  emit(doc._id, null);
}

Запрос представления с GET /mydb/_design/report/_view/myalldocs

Другие вопросы по тегам