使用MongoDB进行每日聚合
通过创建表示日期的键并进行mapReduce操作,可以按每天统计文档的数量。
function map() {
var dateKey = function (d) {
var yy = d.getFullYear();
var mm = d.getMonth() + 1;
var dd = d.getDate();
if (mm < 10) mm = '0' + mm;
if (dd < 10) dd = '0' + dd;
return yy + '-' + mm + '-' + dd;
};
emit(dateKey(this.created_at), 1);
}
function reduce(key, values) {
return Array.sum(values);
}
var daily_counts = db.logs.mapReduce(map, reduce, { query: {}, out: { inline: 1 } });
daily_counts.results.forEach(function (day) {
print(day._id + ', ' + day.value);
});
在中文中,我们应该可以按月份或每周的方式进行类似的统计。
此外,如果想要统计销售额等一些数值,而不仅仅是文档数量,我认为可以在 map 的最后进行如下操作。
emit(dateKey(this.created_at), this.amount);