gpt4 book ai didi

filter - CouchDB、all_docs 和使用 endkey 过滤设计文档

转载 作者:行者123 更新时间:2023-12-01 16:28:01 24 4
gpt4 key购买 nike

首先,这个问题 - 从 all_docs 中过滤设计文档 - 似乎已经解决了,如下所述: https://plus.google.com/+JasonDeRose/posts/1iP5tu3wVqw

/mydb/_all_docs?endkey=%22_%22

并获得第一名。然而,突然在不同的设置(实际上只是不同的部署)中,查询仅返回一个空集合[]。似乎顺序发生了变化,没有 endkey="_"则返回完整集合(包括设计文档)。我尝试了各种endkey/startkey组合,但无法再次过滤设计文档。

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

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

最佳答案

/_all_docs 是 CouchDB 的一个特例。它使用 ASCII 排序规则,而不是普通的 Unicode 排序规则。

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

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

但是,我建议您完全停止使用 `_all_docs View 。相反,请使用普通 View 功能。当您创建 View 时,CouchDB 会自动为您跳过设计文档。因此,如果您的 View 如下所示:

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

您可以在没有开始或结束键的情况下查询此内容,并获取没有设计文档的所有文档。

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

http://docs.couchdb.org/en/stable/ddocs/views/collation.html

关于filter - CouchDB、all_docs 和使用 endkey 过滤设计文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23561838/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com