2010-03-28 49 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

相关问题