CouchDb获取ID以前缀开头的所有文档
我想获取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由
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
?我之所以这样做,是因为它不是下列出的参数之一,而且使用它不起作用。因此,我认为这些参数不受支持。我没有注意到有一部分说它也有和视图相同的参数。正如我在下面的回答中所说的,我最终还是找到了答案。