CouchDb提取ID以前缀

时间:2019-05-15 17:37:01

标签: couchdb

我想从文档ID以给定前缀开头的CouchDB数据库中获取所有文档。

根据CouchDB Documentation进行了一些搜索,发现最好的方法是使用startkeyendkey,其中startkey是前缀,并且endkey是在其末尾附加高价值Unicode字符的前缀。

据我所知,对"http://server:5984/some_db/_all_docs?startkey=2018&endkey=2018\ufff0&include_docs=true"的调用应从some_db提取ID为'2018'的所有文档。

该网址正由网络浏览器进行如下编码: 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不支持endkeystartkey参数。我原以为可行的请求实际上只是在返回整个数据库。

我假设_all_docs支持startkey和andkey,因为我过去使用过PouchDB,which does支持allDocs()函数中的那些参数。

仍在寻找解决方案,因为该项目不是使用PouchDB ,但至少现在我知道了问题所在。

更新2

先前的更新是错误的,尽管_all_docs的文档中未列出这些参数,但我遗漏了一条注释,指出它也支持parameters for view,请参阅下面的答案。< / p>

1 个答案:

答案 0 :(得分:0)

好的,我知道了。

我在更新中错了,startkey支持endkey_all_docs ,因为它只是内置视图,因此用于意见适用。但是,它希望传递的值是JSON值,而不仅仅是作为键的裸字符串。解决方案是在密钥周围加上引号。

即编码的引号,例如startkey=%222018%22&endkey=%222018%EF%BF%B0%22