CouchDB 在Cloudant的_all_docs查询中排除设计文档

qgelzfjb  于 2022-12-09  发布在  CouchDB
关注(0)|答案(1)|浏览(183)

我想检索除设计文档以外的所有文档,但_all_docs返回了DB中的所有文档。从答案中,我发现使用两个查询将给予结果。

  1. _all_docs?endkey="_"-列出第一个设计文档之前的文档
  2. _all_docs?startkey="design_\uffff"-在设计文档之后列出文档
    如果design docs后面的文档有_id“′ ′ test”,这就不起作用了。它给出的文档有以小写字母开头的_id
    _的ASCII码为95,反勾号的ASCII码为96,小写字母以97开始。
    因此,可以将上述查询修改为:
_all_docs?startkey="`"
x6492ojm

x6492ojm1#

_all_docs端点确实返回了设计文档,这一点非常正确。由于_字符位于数字+大写字母和小写字母之间,因此设计文档出现在以小写字母(或本例中的倒勾)开头的文档之前。
这给您留下了两个选择:
1.对_all_docs进行两次调用,以获取设计文档“任意一侧”的文档:

GET /mydb/_all_docs?endkey="_"
 GET /mydb/_all_docs?startkey="`"

1.或者,创建一个新的MapReduce视图。由于MapReduce视图不对设计文档编制索引,因此您可以在一个查询中获得所有文档(不包括设计文档)的列表。
Map函数可以简单到

function(doc) {
  emit(doc._id, null);
}

GET /mydb/_design/report/_view/myalldocs查询视图

相关问题