CouchDb извлекает все документы, где ID начинается с префикса - PullRequest
0 голосов
/ 15 мая 2019

Я хочу получить все документы в базе данных CouchDB, где идентификатор документа начинается с заданного префикса.

Некоторый поиск и нашел, согласно Документация CouchDB , лучший способ сделать это с помощью startkey и endkey, где startkey является префиксом, а endkey - это префикс с добавленным в конце значком символа Юникод.

Итак, насколько я понимаю, вызов "http://server:5984/some_db/_all_docs?startkey=2018&endkey=2018\ufff0&include_docs=true" должен получить все документы из some_db с идентификатором, начинающимся с '2018'.

Этот URL кодируется веб-браузером следующим образом: http://server:5984/some_db/_all_docs?startkey=2018&endkey=2018%EF%BF%B0&include_docs=true

И ответ, который я получаю, - {"error":"bad_request","reason":"invalid UTF-8 JSON"}

Поэтому я попытался просто придерживаться чистого ASCII и использовал ~ вместо \ufff0. Тот же ответ. Также получил тот же ответ, используя z.

Если я делаю что-то вроде _all_docs?startkey=2018&endkey=2019&include_docs=true&inclusive_end=false, все работает нормально, и я получаю ожидаемые результаты. Тем не менее, я не могу гарантировать, что префикс всегда будет числом, и у меня сложилось впечатление, что попытка реализовать его таким образом программно вызовет у меня проблемы, где-то, а где-то как. Есть мысли?

Я использую Dart, запущенный в веб-браузере, чтобы сделать запрос, если это имеет значение.

Обновление

Итак, я понял, что на самом деле _all_docs не поддерживает параметры endkey и startkey. Запрос, который я изначально думал, работал, на самом деле просто возвращал всю базу данных.

Я предполагал, что _all_docs поддерживает startkey и andkey, потому что в прошлом я использовал PouchDB, , который поддерживает эти параметры в функции allDocs().

Все еще ищу решение, поскольку этот проект не использует PouchDB, но по крайней мере теперь я знаю, в чем проблема.

Обновление 2

Предыдущее обновление было неверным, хотя в документации _all_docs эти параметры не указаны, есть заметка, которую я пропустил, указывающая, что она также поддерживает параметры для просмотра , см. Мой ответ ниже .

1 Ответ

0 голосов
/ 15 мая 2019

Хорошо, я понял это.

Я ошибся в своем обновлении, startkey и endkey поддерживаются _all_docs, потому что это просто встроенное представлениетак что все параметры для представлений применяются.Однако он ожидает, что переданные значения будут значениями JSON, а не просто пустой строкой в ​​качестве ключа.Решение состоит в том, чтобы просто поставить кавычки вокруг клавиш.

То есть закодированные кавычки, например startkey=%222018%22&endkey=%222018%EF%BF%B0%22

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