我在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函数?
答案 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);
}
}