将其他分组精确归类时的最大值求和

时间:2014-07-31 09:40:31

标签: couchdb nosql

我将逐步解释。我正在尝试为某个键集获取一个整数值。

所以让我说我有以下地图功能

function(doc) {
    emit([doc.key1, doc.key2, doc.key3], doc.integerValue);
}

这种情况下的doc.IntegerValue是一个序列。所以,让我们说有人取得了0,10,20,30的进步,之后他再次开始了新的一场比赛,再次以0,10,20,30,40开始。

现在我试图达到以下目的。 1)当完成一组精确时它应该ouptut找到的最大integerValue。(前30,后40) 2)当在2级上进行组时,它应该根据方案1的最大值输出总和。这样我就可以计算总值。所以让我们假设key2和key1在两个例子中都相同,它会给我70。 3)当在1级上做一个组时,它也应该给出70.因为它与上一个场景中的2行相同。

_stats reduce函数不起作用,因为它只给出整个组的最大值或整个组的总和,而我的请求是两者的组合。

除了我知道之外,我可以选择将分组内容分开,然后选择startKey和endKey,但我想检查是否可以使用分组选项。

提前感谢任何想法。!

1 个答案:

答案 0 :(得分:0)

如果您对统计信息不感兴趣,为什么不在视图中输出integerValue *的单个最高值,并使用_sum作为缩减功能?

// map function
function(doc) {
  if(!doc.integerValue || !(doc.integerValue instanceof Array)) return
  return ([doc.key1, doc.key2, doc.key3], doc.integerValue.sort().reverse()[0])
}
// reduce function
_sum

这意味着

  • group_level=exact将输出序列的最高值
  • group_level=2将输出每个序列的单个最高值的总和
  • group_level=1也会这样做。

*假设integerValue是一个数组 - 我不是100%肯定你的问题。