2010-03-28 47 views
13

我在CouchDB中有一堆MP3元數據。我想要返回MP3元數據中的每個專輯,但沒有重複。如何在CouchDB中執行「DISTINCT」的SQL等效項?

一個典型的文件看起來是這樣的:

{ 
    "_id": "005e16a055ba78589695c583fbcdf7e26064df98", 
    "_rev": "2-87aa12c52ee0a406084b09eca6116804", 
    "name": "Fifty-Fifty Clown", 
    "number": 15, 
    "artist": "Cocteau Twins", 
    "bitrate": 320, 
    "album": "Stars and Topsoil: A Collection (1982-1990)", 
    "path": "Cocteau Twins/Stars and Topsoil: A Collection (1982-1990)/15 - Fifty-Fifty Clown.mp3", 
    "year": 0, 
    "genre": "Shoegaze" 
} 

回答

25

我相信你的map/reduce看起來是這樣的:

function map(doc) { 
    emit(doc.album, null); 
} 

function reduce(key, values) { 
    return null; 
} 

記住與額外的參數group=true

+0

詢問能否請您解釋一下其中的神奇的是在返回獨特價值? – 2010-03-28 21:13:39

+7

當然。請記住'map'函數接受一個文檔並在'(key,value)'對上調用'emit'。因爲我們只關心這張專輯 - 沒有別的 - 我們只發出這個。然後,對於每個* distinct *鍵,CouchDB將調用'reduce(key,values)'並將其用作查詢的結果(同樣,我們只需從'reduce'返回'null',因爲我們不關心值)。 – 2010-03-28 22:33:19

+0

這有幫助嗎? – 2010-03-28 22:34:21

相關問題