couchdb map-reduce和分组

时间:2011-08-30 18:23:56

标签: couchdb mapreduce

我正在尝试获取对象的唯一事件计数(比如视频):

以下是我的文件:

{
  "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);
        }
    },

但我不明白如何将其减少到每个视频的唯一身份用户,或者我是否会出错。

2 个答案:

答案 0 :(得分:6)

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

使用group_level = 1,在这种情况下,它将按video_id进行分组。使用group_level = 2,它会在video_id user_id上进行分组。

答案 1 :(得分:4)

请求URL后添加?group = true。它将相同的键组合在一起作为reduce函数的输入:

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

应该这样做。

请注意,键和值是解压缩的键列表及其值。对于每次调用reduce,键上的分组都是相同的。