使用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);
广告
将在 10 秒后关闭
bannerAds