Filter CouchDB、所有_文档和使用endkey筛选设计文档

Filter CouchDB、所有_文档和使用endkey筛选设计文档,filter,couchdb,design-documents,Filter,Couchdb,Design Documents,首先,这个问题——从所有文档中筛选设计文档——似乎已经解决了,如下所述: 首先是工作。但是,突然在不同的设置中(实际上只是不同的部署),查询只返回一个空集合[]。似乎订单已更改,如果没有endkey=“\ux”,则返回完整集合(包括设计文档)。我尝试了endkey/startkey的各种组合,但无法再次过滤设计文档 最后,我添加了一个过滤器并切换到_changes?include_docs=true以加载初始文档。我还考虑过定义一个视图,但我不喜欢这样做会导致数据复制和更改提要的一些不便(在另

首先,这个问题——从所有文档中筛选设计文档——似乎已经解决了,如下所述:

首先是工作。但是,突然在不同的设置中(实际上只是不同的部署),查询只返回一个空集合[]。似乎订单已更改,如果没有endkey=“\ux”,则返回完整集合(包括设计文档)。我尝试了endkey/startkey的各种组合,但无法再次过滤设计文档

最后,我添加了一个过滤器并切换到_changes?include_docs=true以加载初始文档。我还考虑过定义一个视图,但我不喜欢这样做会导致数据复制和更改提要的一些不便(在另一个上下文中需要)。另一方面,将对每个文档执行过滤器


endkey=%22\u%22不再工作是一个错误吗?有没有更方便、仍然工作的方法?

/\u所有文档都是CouchDB的特例。它使用ASCII排序,而不是普通的Unicode排序

ASCII顺序的“\”字符显示在大写字母和小写字母之间。因此,如果您的文档id以小写字母开头(默认行为),它们将显示在任何设计文档之后。如果您的文档ID以大写字母开头,它们将显示在设计文档之前

尝试创建一个id为“ABC”的文档,您将看到它在设计文档之前显示,在这种情况下,您过滤设计文档的技巧将起作用

但是,我建议您完全停止使用“所有文档”视图。而是使用普通视图功能。创建视图时,CouchDB会自动跳过设计文档。如果你的观点是:

function(doc){
  emit(doc._id, null);
}
您可以在没有开始键或结束键的情况下查询此文档,并在没有设计文档的情况下获取所有文档

另外,请查看Unicode排序顺序,这是所有其他视图的排序顺序,在使用CouchDB时理解这一点很重要。您可以在此处阅读所有相关内容:

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