2014-07-10 113 views
0

我有一系列有版本字段的文檔。返回最大值的文檔

{ 
"_id": "xxx", 
"_rev": "6-4bdeb530234c454ae2f16d77ba577428", 
"name": "glossary", 
"locale": "en-us", 
"version": "186.0", 
"title": "Glossary", 
... 
} 

我希望能夠返回文檔名稱是最大版本的詞彙表。

如果我作出這樣的地圖功能:

function(doc) { 
    emit(doc.name, doc); 
    } 

,並做了減少的話,我可以找出哪些文件具有最新版本,但是當我試圖返回它(return latest_doc),我得到一個reduce_overflow_error錯誤。

看來我只需要通過地圖功能來做到這一點,但我無法弄清楚如何從地圖中返回具有最高值的單個文檔。

我敢肯定有一個簡單的方法來做到這一點,但我一直沒能弄明白。

你能幫助我獲取我的詞彙表文檔的最新版本嗎?

回答

1

reduce_overflow_error是couchdb的方式告訴你,你沒有使用它應該被使用的方式。來自wiki

Reduce是CouchDB的一個強大功能,但經常被濫用導致性能問題。從0.10開始,CouchDB使用啓發式方法來檢測不會縮放的減少函數,以便爲開發人員提供預警。減少功能必須將輸入值減小到較小的輸出值。如果你在你的降低建築的複合回報率結構,或者只變換值領域,而不是總結它,你可能會被誤用此功能

試試這個地圖功能

function(doc) { 
emit([doc.name,doc.version], doc._id); 

}

/view-name?include_docs=true&startkey=["glossary",{}]&endkey=["glossary"]&descending=true&limit=1

查詢它這將爲您提供最高版本號的文件。如果需要更多文件,請刪除limit參數。