2010-03-28 5 views
13

Ich habe eine Menge MP3-Metadaten in CouchDB. Ich möchte jedes Album zurückgeben, das in den MP3-Metadaten enthalten ist, aber keine Duplikate.Wie mache ich das SQL-Äquivalent von "DISTINCT" in CouchDB?

Ein typisches Dokument sieht wie folgt aus:

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

Antwort

25

Ich glaube, Ihre Karte/reduzieren würde wie etwas aussehen:

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

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

Denken Sie daran, mit dem zusätzlichen Parameter group=true

+0

Könnten Sie bitte erklären, wo die Magie in der Rückkehr eindeutige Werte abzufragen ist? –

+7

Sicher. Denken Sie daran, dass die Funktion 'map' ein Dokument akzeptiert und' emit' auf '(key, value)' pairs aufruft. Weil wir uns nur für das Album interessieren - nichts anderes - wir geben das nur aus. Dann ruft CouchDB für jede * distinct * -Schleife 'reduce (key, values)' auf und verwendet diese als Ergebnis Ihrer Abfrage (wir geben einfach 'null' von 'reduce' zurück, weil uns die .doc nicht interessiert Wert). –

+0

Hilft das? –