Couchbase减少了多个值

时间:2015-02-22 16:01:08

标签: couchbase couchbase-view

我正在Couchbase 3.0.1中构建一个视图,并希望从地图中减少多个值,但我不确定正确的方法。

在订单对象的情况下,我想解决的问题是我想从地图中减少多个值(特别是小计,税和总计)。我首先将值输出为对象:

function (doc, meta) {
  if (doc.object == "order") {
    emit(dateToArray(doc.order_date), {subtotal: doc.subtotal, tax: doc.tax, total: doc.total});
  }
}

然而,这对我没什么帮助,因为我不确定如何在地图输出自定义对象时减少值。显然内置的_sum reduce函数不会处理它,所以:

有人可以提供一些关于从Couchbase中的地图输出中减少多个值的最佳方法的建议吗?

1 个答案:

答案 0 :(得分:2)

您可以编写自己的自定义缩减功能。自定义reduce接受3个参数:

  1. key - map
  2. 发出的其中一个键
  3. values - 为该特定键发出的值数组
  4. rereduce - 这是第一次减少调用,还是重新减少,它汇总了reduce本身返回的中间值。
  5. 在您的情况下,您只需要一个简单的总和,因此reduce的代码与rereduce相同:计算3阶对象属性的总和并返回结果。它应该看起来像这样(从内存中输入,JS语法可能稍微偏离。)

    reduce(key, values, rereduce) {
      var result = values[0];
    
      for(var i = 1; i < values.length; i++) {
        result.subtotal += values[i].subtotal;
        result.tax += values[i].tax;
        result.total += values[i].total;
      }
    
      return result;
    }