按日期构建统计功能

Build stats function on date

我有 Cloudant db,它实际上是 couchdb。 我的文档中有一个日期字段,我需要获得类似于 _stats 在数字字段(例如最小值、最大值、平均值、计数)上提供的统计信息。有没有办法在 cloudant 中做到这一点?

我已经在 map 函数中转换为时间戳并将其发送给 reduce。这是正确的做法吗?

CouchDB 和 Cloudant 允许将日期作为 MapReduce 索引中的复合键进行索引,例如像这样生成密钥:

[ 2014, 5, 21]

其中数组的每个元素分别代表您存储日期的年、月和日。

这可以在 map 函数中实现,如下所示:

function(doc) {
  if (typeof(doc.date) === "string") {
    var d = new Date(doc.date);
    emit([ d.getFullYear(), d.getMonth()+1, d.getDay()], null);
  }
}

使用 _count reducer,该索引可以与 group_level 参数一起使用,以生成时间序列数据的综合分析,例如

  • 按年计算
  • 给定年份的月数
  • 给定年份的天数
  • 按年月日计算

通过在emit的第二个参数中添加一个数值,并使用_stats,可以很容易地从索引中提取时间序列统计信息并像上面那样进行分组。