0

我有以下记录结构(简化为仅包含重要的位):

_id: couchDB generated ID
_rev: couchDb generated revision number
_creationDate: timestamp for when the record was created
_amount: how much money was paid
_type: how they paid (Visa, MC, etc.)

我需要能够使用 creationDate 作为开始和结束键来总结每种付款类型的总数。我想避免对每种类型进行多次查询,因为可能存在未知数量的付款类型。我首先必须查询所有可用类型,然后对每种特定类型进行一次查询。

我的观点地图:

   function(doc) {
      if(doc.type=="payment") {
        emit([doc.type, doc.creationDate], doc.amount);
      }
   }

我的视图的减少功能:

_sum

我的查询:

   ViewQuery query = new ViewQuery()
      .designDocId(GLOBAL_DOC)
      .viewName(TOTAL_CREDIT_CARD_PAYMENTS_FOR_TODAY)
      .startKey(start)
      .group(true)
      .groupLevel(1)
      .reduce(true);

当我在蒲团中运行查询时,它会按预期构建所有内容,给出按类型分组的所有类型的总数(并忽略 creationDate,因为没有指定开始或结束)。当我使用查询运行它时,看起来开始和结束日期被忽略了,因为我得到的数据超出了总计中包含的预期范围。

另外,有没有办法通过蒲团来运行带有开始键和结束键的查询?如果我知道如何跳过重新编译/重新安装步骤,那么开发这些东西会更快。

编辑:我想要实现的 SQL 版本看起来像这样:

   SELECT sum(amount)
   FROM payment
   WHERE creationDate >= startDate AND creationDate <= endDate
   GROUP BY type;

是否有标准模式可以从 map/reduce 中获取这种行为?

4

1 回答 1

0

到最后发现是做不到的。我必须编写一个视图来获取所有可用组的列表,然后在我的代码中循环遍历它,调用另一个组来获取每个组的总和。

于 2013-07-12T21:28:25.707 回答