2011-08-30 206 views
3

我试图获得独特事件的计数的对象(可以说视频):CouchDB的地图,减少和分组

这里是我的证件:

{ 
    "type":"View", 
    "video_id": "12300", 
    "user_id": 3 
} 

{ 
    "type":"View", 
    "video_id": "12300", 
    "user_id": 1 
} 
{ 
    "type":"View", 
    "video_id": "45600", 
    "user_id": 3 
} 

我想得到的观点的一个独特(由user_id)计数为每个视频

我想我想我的数据映射,像这样:

function(doc) { 
     if (doc.type === 'View') { 
      emit([doc.video_id, doc.user_id], 1); 
     } 
    }, 

但我不明白如何将它降低到每个视频的独特用户,还是我会讨论这个错误。

回答

6

你应该看看group_level视图参数。它将允许您更改发生分组的字段。

通过使用group_level = 1,在这种情况下,它将按video_id分组。使用group_level = 2,它将分组video_iduser_id

4

在请求URL后面添加?group = true。将相同的键组合在一起作为缩小功能的输入:

function(keys, values, rereduce){ 
    return sum(values); 
} 

这应该这样做。

请注意,键和值是解压缩的键列表及其值。通过键盘上的分组,每次调用reduce都是一样的。