CouchDb获取ID以前缀开头的所有文档

CouchDb获取ID以前缀开头的所有文档,couchdb,Couchdb,我想获取CouchDB数据库中的所有文档,其中文档ID以给定前缀开头 进行了一些搜索并发现,根据,实现这一点的最佳方法是使用startkey和endkey,其中startkey是前缀,endkey是在末尾附加了高值unicode字符的前缀 因此,据我所知,调用”http://server:5984/some_db/_all_docs?startkey=2018&endkey=2018\ufff0&include_docs=true“应该从某些数据库获取ID以“2018”开头的所有文档 该url由

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

进行了一些搜索并发现,根据,实现这一点的最佳方法是使用
startkey
endkey
,其中
startkey
是前缀,
endkey
是在末尾附加了高值unicode字符的前缀

因此,据我所知,调用
”http://server:5984/some_db/_all_docs?startkey=2018&endkey=2018\ufff0&include_docs=true“
应该从
某些数据库
获取ID以“2018”开头的所有文档

该url由web浏览器编码如下:
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
也得到了相同的响应

如果我做了一些像
\u all\u docs?startkey=2018&endkey=2019&include\u docs=true&inclusive\u end=false
这样的事情,一切都很好,我得到了预期的结果。然而,我不能保证前缀总是一个数字,我得到的印象是,试图以编程方式实现它会给我带来一些问题,比如在哪里或者如何实现。有什么想法吗

我正在使用在web浏览器中运行的Dart来发出请求,如果这有什么不同的话

更新 因此,我意识到实际上所有文档都不支持
endkey
startkey
参数。我最初认为有效的请求实际上只是返回整个数据库

我假设所有文档都支持startkey和andkey,因为我以前使用过PockDB,所以在
allDocs()
函数中支持这些参数

仍然在寻找解决方案,因为这个项目没有使用PockDB,但至少现在我知道问题出在哪里了

更新2
以前的更新是错误的,虽然
\u all\u docs
的文档中没有列出这些参数,但有一个注释我遗漏了,表明它也支持,请参见下面我的答案。

好的,我找到了

我在更新时出错,
startkey
endkey
\u all\u docs
支持,因为它只是一个内置视图,所以视图的所有参数都适用。但是,它希望传递的值是JSON值,而不仅仅是作为键的裸字符串。解决方法就是在键的周围加上引号


也就是说,编码引号,例如
startkey=%2212018%22&endkey=%2212018%EF%BF%B0%22

为什么您认为
\u所有文档
都不支持
endkey
startkey
?我之所以这样做,是因为它不是下列出的参数之一,而且使用它不起作用。因此,我认为这些参数不受支持。我没有注意到有一部分说它也有和视图相同的参数。正如我在下面的回答中所说的,我最终还是找到了答案。