Исключение проектных документов в запросе _all_docs в Cloudant
Я хочу получить все документы, кроме проектных, но _all_docs возвращает все документы в БД. Из ответов я обнаружил, что использование двух запросов даст результаты.
- _all_docs? endkey = "_" - перечисляет документы до первого документа дизайна
- _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