我有一个包含每笔销售的mongodb系列,看起来像这样
{_id: '999',
buyer:{city:'Dallas','state':'Texas',...},
products: {...},
order_value:1000,
date:"2011-11-23T11:34:33Z"
}
我需要在过去的30,60和90天内按州显示订单量的统计数据。 所以,得到这样的东西
State Last 30 Last 60 Last 90 Arizona 12000 22000 35000 Texas 5000 9000 16000
如何在单个查询中执行此操作?
答案 0 :(得分:0)
这不是很难:
map = function() {
emit({key : this.buyer.state, value : order_value})
}
reduce = function(key,values) {
sum = 0;
values.forEach( function(o) {
sum += o
}
return sum
}
然后您使用查询{date:{$ gt:{[today minus 30 days]}}缩小您的收藏集 (我会记住语法,但你应该在mongodb网站上使用优秀的mapreduce文档)。
为了更有效地使用地图缩小功能,请先考虑incremental map reduce在过去30天内先查询,然后再次(逐步增加)地图过滤-60到-30天,以获取有关las t60天的信息。最后,运行增量映射减少过滤-60到-90天以获得最后90天。
这不错,因为你有3个查询,但你只重新计算你尚未拥有的数据的聚合。
我可以提供示例,但您现在应该可以自己做。