CouchDB:获取给定密钥范围内的密钥数

CouchDB:获取给定密钥范围内的密钥数,couchdb,range,Couchdb,Range,在我的CouchDB数据库中,所有键的形式都是“A_uxxxxxxxx”,其中xxxxxxxx是零填充十进制数(例如“A_00000001”或“A_12345678”) 我只想获得给定关键点范围内的关键点数量 例如,要获取从10000000到30000000的密钥,我可以查询如下内容: GET DATABASE/_all_docs?startkey="A_00001000"&endkey="A_30000000"&include_docs=false 但是结果包含所有键,我需要

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

我只想获得给定关键点范围内的关键点数量

例如,要获取从10000000到30000000的密钥,我可以查询如下内容:

GET DATABASE/_all_docs?startkey="A_00001000"&endkey="A_30000000"&include_docs=false
但是结果包含所有键,我需要计算输出的“docs”字段中的元素

因为我的查询中的键的数量将是巨大的,我只想知道键的数量,而不是实际的键列表

范围起始值和范围结束值可以不同,这不是固定的

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


谢谢,

您无法使用内置的
\u all\u docs
视图获取给定密钥范围内的密钥数。但是,使用自定义map reduce视图(如中所述)可以获得所需的结果

map.js

function(doc) {
    emit(doc._id, 1);
}
function(keys, values, rereduce) {
    return sum(values)
}
reduce.js

function(doc) {
    emit(doc._id, 1);
}
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}"
       }
   }
}
\u design/test/count
然后可以像查询
\u all\u docs
一样进行查询,并返回开始键和结束键之间的文档数

当我在没有开始键和结束键的情况下再次运行此查询时,我得到以下结果:

{
    "rows":[
        {
            "key": null,
            "value": 185
        }
    ]
}
{
    "rows":[
        {
            "key": null,
            "value": 11
        }
    ]
}
在填充开始键和结束键的情况下再次运行查询,得到以下结果:

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

您无法使用内置的
\u all\u docs
视图获取给定密钥范围内的密钥数。但是,使用自定义map reduce视图(如中所述)可以获得所需的结果

map.js

function(doc) {
    emit(doc._id, 1);
}
function(keys, values, rereduce) {
    return sum(values)
}
reduce.js

function(doc) {
    emit(doc._id, 1);
}
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}"
       }
   }
}
\u design/test/count
然后可以像查询
\u all\u docs
一样进行查询,并返回开始键和结束键之间的文档数

当我在没有开始键和结束键的情况下再次运行此查询时,我得到以下结果:

{
    "rows":[
        {
            "key": null,
            "value": 185
        }
    ]
}
{
    "rows":[
        {
            "key": null,
            "value": 11
        }
    ]
}
在填充开始键和结束键的情况下再次运行查询,得到以下结果:

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