【问题标题】:Couchbase reduce multiple valuesCouchbase 减少多个值
【发布时间】:2015-02-22 16:01:08
【问题描述】:

我正在 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 中的地图输出中减少多个值的最佳方法提供一些建议吗?

【问题讨论】:

    标签: couchbase couchbase-view


    【解决方案1】:

    您可以编写自己的自定义 reduce 函数。自定义 reduce 接受 3 个参数:

    1. key - map 发出的键之一
    2. values - 为该特定键发出的值数组
    3. rereduce - 这是第一次调用 reduce,还是聚合 reduce 本身返回的中间值的 re-reduce。

    在您的情况下,您只需要一个简单的总和,因此 reduce 的代码与 rereduce 相同:计算 3 个 order 对象属性的总和并返回结果。它应该看起来像这样(从内存中键入,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;
    }
    

    【讨论】:

    • 完美——正是我所需要的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2014-09-08
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-27
    • 2016-10-31
    • 2019-04-02
    相关资源
    最近更新 更多