我是CouchDB的新手,我正在寻找执行以下计数的最佳方式:
我的文件看起来像这样:
{
field_1: "some_string",
field_2: "some_other_string"
}
我想要计算field_2
中具有特定值的所有文档,以便在通过{{1}查找具有该字段值的所有文档时,我知道应该设置的limit
是什么使用POST /{db}/_find
。
我已经阅读了有关设计文档和视图以及查询协议的一些内容,但我无法理解实现此目的的正确方法。我是否需要先计算文件数量?或者有没有办法在执行查找时快速了解这一点?
答案 0 :(得分:0)
...查找具有该字段值的所有文档时...
我认为您的目的是查找具有特定字段的所有文档。
我对/<db>/_find
或/<db>/_index
的CouchDB mango 查询了解不多,但我认为您可以通过以下方式查找具有特定字段值的所有文档做HTTP请求。
假设您有以下文档,并且希望查找title
字段等于Jacob
字符串的所有文档:
{
"_id": "doc5",
"_rev": "1-27f5da5ca3157d4bca8b485d411e86c5",
"unicodeString": "יעקב",
"title": "Jacob"
}
您可以实现如下所示的视图映射功能。此视图根据B树数据结构中的title
字段对数据库内的所有文档进行排序:
function (doc) {
if(doc.title){
emit(doc.title, [doc.unicodeString])
}
}
让我们假设上面视图的名称是by_title
,数据库的名称是sample
,然后我们可以执行如下所示的HTTP请求来获取title
的所有文档字段等于,例如,Jacob
字符串:
$ curl -k -X GET https://joe:joe@192.168.1.106:6984/sample/_design/by_title/_view/by_title?key=\"Jacob\"
{"total_rows":15,"offset":8,"rows":[
{"id":"doc5","key":"Jacob","value":["יעקב"]},
{"id":"doc6","key":"Jacob","value":["ישראל"]}
]}
如您所见,上面带有curl
的HTTP GET请求会返回title
字段等于Jacob
字符串的所有文档。我使用https
和6984
端口,因为我将CouchDB与SLL和自签名证书一起使用,但您可以将其与http
和端口{一起使用{1}}。
同样在上面的5984
命令中,我使用带有转义双引号的密钥:curl
。这样做的原因是我的Linux shell命令行在将它们传递给?key=\"Jacob\"
之前会使用双引号,因此我必须将它们转义以使其正常工作。