Я хочу получить все документы в базе данных 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
эти параметры не указаны, есть заметка, которую я пропустил, указывающая, что она также поддерживает параметры для просмотра , см. Мой ответ ниже .