如何计算视图中键的唯一出现次数

时间:2019-02-04 21:14:52

标签: view mapreduce couchdb

我在CouchDB视图映射功能中发出了以下关键值。

{"key":101,"value":"ABC"}
{"key":101,"value":"ABC"}
{"key":101,"value":"ABC"}
{"key":101,"value":"XYZ"}
{"key":101,"value":"XYZ"}
{"key":101,"value":"XYZ"}
{"key":102,"value":"XYZ"}
{"key":102,"value":"XYZ"}

我需要将每个键的输出作为唯一值计数。

{"key":101,"value":2}
{"key":102,"value":1}

我该如何使用reduce函数?

2 个答案:

答案 0 :(得分:0)

如果每个键的唯一值的计数是有限的,并且我们可以将它们保存在Set中。

在Reducer内执行以下操作:

foreach value for a given key 
iterate each value and add to a set 
emit key, set.size()

示例


Key 101 - Value [ABC, ABC, ABC, XYZ, XYZ, XYZ]
101, create a set s with elements [ABC, XYZ]
emit 101,2 where 2 is s.size()

Key 102 - Value [XYZ, XYZ]
102, create a set s with elements  [XYZ]
emit 102, 1 where 1 is s.size()

映射以按原样发出键值。还建议使用组合器。

答案 1 :(得分:0)

您可以尝试将功能更改为如下所示,然后使用_sum缩小功能

假设val持有ABC,XYZ,而num持有101、102

function (doc) {
  if (doc.value) {
    emit([doc.num, doc.val], 1);  
  }
}