Couchdb 分组时求和最大值,然后求和

Couchdb 分组时求和最大值,然后求和,couchdb,nosql,Couchdb,Nosql,我会一步一步地解释。我试图为某个键集获取一个整数值 假设我有下面的map函数 function(doc) { emit([doc.key1, doc.key2, doc.key3], doc.integerValue); } 本例中的doc.IntegerValue是一个序列。假设有人取得了0,10,20,30的进步,然后他又开始了一个新的sessionId,再次是0,10,20,30,40 现在我正试图达到以下目标。 1进行组精确运算时,应输出找到的最大整数值。前30,后40 2在级

我会一步一步地解释。我试图为某个键集获取一个整数值

假设我有下面的map函数

function(doc) {
    emit([doc.key1, doc.key2, doc.key3], doc.integerValue);
}
本例中的doc.IntegerValue是一个序列。假设有人取得了0,10,20,30的进步,然后他又开始了一个新的sessionId,再次是0,10,20,30,40

现在我正试图达到以下目标。 1进行组精确运算时,应输出找到的最大整数值。前30,后40 2在级别2上进行分组时,应根据场景1上的最大值输出总和。这样我就可以计算总价值了。假设key2和key1在这两个例子中都相同,它会给我70。 3当在1级上进行分组时,也应给出70。因为它与上一个场景中的2行相同

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

除此之外,我知道,我可以选择离开分组的事情,然后选择与startKey和endKey,但我想检查是否有可能与分组选项


提前谢谢你的建议

如果您对stats不感兴趣,为什么不在视图中输出integerValue*的单个最高值,并使用_sum作为reduce函数呢

// 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将输出序列的最高值 组_level=2将输出每个序列中单个最高值的总和 组_level=1也会这样做。 *假设integerValue是一个数组-从你的问题来看,我不是100%确定