CouchDB:获取给定键范围内的键数

时间:2012-11-04 06:43:49

标签: couchdb range

在我的CouchDB数据库中,所有密钥都具有“A_xxxxxxxx”形式,其中xxxxxxxx是零填充十进制数(例如“A_00000001”或“A_12345678”)

我想在给定的键范围内只获得键数

例如,要将密钥从A_10000000获取到A_30000000,我可以查询类似的内容:

GET DATABASE/_all_docs?startkey="A_00001000"&endkey="A_30000000"&include_docs=false

但结果包含所有键,我需要计算输出的“docs”字段中的元素。

由于我的查询中的键数量很大,而我想知道的只是键的数量,而不是实际的键列表。

范围开始和范围结束值可以变化,这是不固定的。

是否可以只获取给定范围的键数,而无需检索实际的键列表?

谢谢,

1 个答案:

答案 0 :(得分:1)

使用内置_all_docs视图无法获取给定键范围内的键数。但是您可以使用自定义地图缩小视图获得所需的结果,例如CouchDB Definitive Guide

中描述的视图

<强> map.js

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

<强> reduce.js

function(keys, values, rereduce) {
    return sum(values)
}

您可以使用Futon管理实用程序通过创建包含以下内容的新文档将这些视图添加到CouchDB数据库中:

{
   "_id": "_design/test",
   "views": {
       "count": {
           "map": "function(doc) {\n    emit(doc._id, 1);\n}",
           "reduce": "function(keys, values, rereduce) {\n  return sum(values)\n}"
       }
   }
}
然后可以代替_design/test/count查询

_all_docs,并返回开始和结束键之间的文档数。

当我再次运行此查询时,我的数据库没有开始和结束键,我得到了这个结果:

{
    "rows":[
        {
            "key": null,
            "value": 185
        }
    ]
}

使用开始和结束键再次运行查询我得到了这个结果:

{
    "rows":[
        {
            "key": null,
            "value": 11
        }
    ]
}