2012-11-04 24 views
1

在我的CouchDB數據庫中,所有按鍵的形式爲「A_xxxxxxxx」其中xxxxxxxx是零填充十進制數(如「A_00000001」或「A_12345678」)CouchDB的:獲得在給定的鍵程鍵的數量

我想在給定的密鑰範圍內只獲得密鑰數量

例如,從A_10000000拿到鑰匙A_30000000,我可以查詢類似:

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

但結果包含了所有按鍵,而我需要的「文檔」字段來算的元素輸出。

由於我查詢中的鍵數量很大,而且我想知道的只是鍵的數量,而不是鍵的實際列表。

範圍開始和範圍結束值可以變化,這是不固定的。

是否可以只獲取給定範圍內的鍵的數量,而不檢索實際的鍵列表?

感謝,

回答

1

使用你不能在一個給定的鍵程鍵的數量內置_all_docs視圖。但是你可以使用自定義地圖減緩View得到期望的結果,如這一個在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 
     } 
    ] 
}