2010-03-28 8 views
13

Ho un sacco di metadati MP3 in CouchDB. Voglio restituire tutti gli album nei metadati MP3, ma non duplicati.Come faccio l'equivalente SQL di "DISTINCT" in CouchDB?

Un documento tipico assomiglia a questo:

{ 
    "_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" 
} 

risposta

25

Credo che la vostra mappa/ridurre sarebbe simile:

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

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

Ricordati di interrogare con il parametro aggiuntivo group=true

+0

La prego di spiegare dove la magia è nel ritornare valori unici? –

+7

Sicuro. Ricorda che la funzione 'map' accetta un documento e chiama' emit' sulle coppie '(chiave, valore)'. Perché ci interessa solo l'album - nient'altro - lo emettiamo solo. Quindi, per ogni * distinta * chiave, CouchDB chiamerà 'reduce (chiave, valori)' e la userà come risultato della tua query (di nuovo, restituiamo semplicemente 'null' da' reduce' perché non ci interessa valore). –

+0

Questo aiuto? –