2010-03-28 6 views
13

J'ai un tas de métadonnées MP3 dans CouchDB. Je veux retourner chaque album qui est dans les métadonnées MP3, mais pas de doublons.Comment faire l'équivalent SQL de "DISTINCT" dans CouchDB?

Un document typique ressemble à ceci:

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

Répondre

25

Je crois que votre map/reduce ressemblerait à quelque chose comme:

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

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

Souvenez-vous d'interroger avec le paramètre supplémentaire group=true

+0

Pourriez-vous s'il vous plaît expliquer où la magie est en retour des valeurs uniques? –

+7

Bien sûr. Souvenez-vous que la fonction 'map' accepte un document et appelle' emit' sur les paires '(key, value)'. Parce que nous nous soucions seulement de l'album - rien d'autre - nous n'émettons que ça. Ensuite, pour chaque clé * distinctive *, CouchDB appellera 'reduce (key, values)' et l'utilisera comme résultat de votre requête (encore une fois, nous retournons 'null' de' reduce' car nous ne nous soucions pas de la valeur). –

+0

Cela aide-t-il? –