我有一个按日期分组的地图缩小:
map = %Q{
function() {
var rounded_time = this.created_at;
rounded_time.setHours(0,0,0,0);
emit(rounded_time.getTime() / 1000, this.total);
}
}
reduce = %Q{
function(key, values) {
var result = 0;
values.forEach(function(value) {
result += value;
});
return result;
}
}
data = Order.map_reduce(map, reduce).out(inline: true)
但当然有些日期没有任何订单,因此它们不会出现在结果中。这被送入时间序列图表,因此在那些日子里有零会很好。
我想知道是否有一种干净的方法用零填写缺少的日期。似乎在每个日期做一个初始emit(time, 0)
将是单向的,但我还没有看到在mongo中做到这一点的方法。
因此,当数据从地图中减少时,我无法对数据进行按摩,这不是很有效且容易出现舍入错误。谢谢!
答案 0 :(得分:0)
当你去编写报告时,这可能是最好的。
问题是那些行不存在且MR无法在循环中随意形成新文档,它只能修改输入到它的文档。
因此,当您在图表中迭代文档时,您很可能会知道您在搜索的时间序列(日,月,年)中使用的分隔符,并且可以轻松修改数据以在这些点添加0值缺少的。一般来说,最好的方法是不要在循环中滚动光标来制作图形,而是滚动日期列表,然后从光标中获取该日期或在其中放置零值。
所以我在数据从地图缩小后停止按摩,这不是那么有效且容易出现舍入错误
它应该不容易出错,如果做得正确,它应该像数据库那样准确,因为你使用的是客户定义的(我假设)时间范围而且你正在对分隔符进行分组,所以它不应该是容易出错。