在我的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”字段中的元素。
由于我的查询中的键数量很大,而我想知道的只是键的数量,而不是实际的键列表。
范围开始和范围结束值可以变化,这是不固定的。
是否可以只获取给定范围的键数,而无需检索实际的键列表?
谢谢,
答案 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
}
]
}