【问题标题】:How to count unique occurrences of a key in a view如何计算视图中键的唯一出现次数
【发布时间】:2019-02-04 21:14:52
【问题描述】:

我在 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 函数呢?

【问题讨论】:

  • 你试过什么?包括你的代码。你遇到了什么问题?

标签: view mapreduce couchdb


【解决方案1】:

如果每个键的唯一值计数是有限的,并且我们可以将它们保存在 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()

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

【讨论】:

    【解决方案2】:

    您可以尝试将您的函数更改为如下所示并使用_sum reduce 函数

    假设val 持有ABC、XYZ 并且num 持有101、102

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-14
      相关资源
      最近更新 更多