我有以下记录结构(简化为仅包含重要的位):
_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 中获取这种行为?