2010-03-28 15 views
13

Mam kilka metadanych MP3 w CouchDB. Chcę zwrócić każdy album z metadanych MP3, ale bez duplikatów.Jak zrobić SQL równoważny "DISTINCT" w CouchDB?

Typowy dokument wygląda następująco:

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

Odpowiedz

25

wierzę swoją mapę/zmniejszenia będzie wyglądać następująco:

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

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

Pamiętaj, aby zapytać o dodatkowym parametrem group=true

+0

Czy mógłbyś wyjaśnić, gdzie magia jest w powrocie unikalne wartości? –

+7

Pewnie. Pamiętaj, że funkcja 'map' akceptuje jeden dokument i wywołuje' emit' na '(klucz, wartość)' parach. Ponieważ dbamy tylko o album - nic więcej - emitujemy tylko to. Następnie, dla każdego * odrębnego * klucza, CouchDB wywoła 'redu (klucz, wartości)' i użyje tego jako wyniku zapytania (ponownie zwracamy 'null' z' reduce', ponieważ nie zależy nam na wartość). –

+0

Czy to pomaga? –