MongoDB MapReduce标准偏差超过日期范围

时间:2014-10-07 11:49:25

标签: mongodb mapreduce aggregation-framework

下午好,我想知道是否有人可以帮助我。我目前正在研究使用MongoDB Aggregation Framework和MapReduce函数。

我的数据集看起来像这样

[{
     "Name" : "Person 1",
    "RunningSpeed" : [{
            "Date" : ISODate("2005-07-23T23:00:00.000Z"),
            "Value" : 10
        }, {
            "Date" : ISODate("2006-07-23T23:00:00.000Z"),
            "Value" : 20
        }, {
            "Date" : ISODate("2007-07-23T23:00:00.000Z"),
            "Value" : 30
        }, {
            "Date" : ISODate("2008-07-23T23:00:00.000Z"),
            "Value" : 40
        }

    ]

}, {
    "Name" : "Person 2",
    "RunningSpeed" : [{
            "Date" : ISODate("2005-07-23T23:00:00.000Z"),
            "Value" : 5
        }, {
            "Date" : ISODate("2006-07-23T23:00:00.000Z"),
            "Value" : 10
        }, {
            "Date" : ISODate("2007-07-23T23:00:00.000Z"),
            "Value" : 20
        }, {
            "Date" : ISODate("2008-07-23T23:00:00.000Z"),
            "Value" : 40
        }

    ]

}, {
    "Name" : "Person 3",
    "RunningSpeed" : [{
            "Date" : ISODate("2005-07-23T23:00:00.000Z"),
            "Value" : 20
        }, {
            "Date" : ISODate("2006-07-23T23:00:00.000Z"),
            "Value" : 10
        }, {
            "Date" : ISODate("2007-07-23T23:00:00.000Z"),
            "Value" : 30
        }, {
            "Date" : ISODate("2008-07-23T23:00:00.000Z"),
            "Value" : 25
        }

    ]

}

我做了很多研究,正如我所看到的,没有开箱即用的SD计算支持。我查看了一些链接和SO帖子,并提出了这个网址https://gist.github.com/RedBeard0531/1886960,这似乎是我正在寻找的。

关于背景,我想做的就是每年生成一张SD图表。

目前的功能并不是每年只考虑整体价值。我已经将map函数更改为并且不知道将组日期函数放在何处。

function map() {
    emit(1, // Or put a GROUP BY key here
     {sum: this.RunningSpeed.value, // the field you want stats for
      min: this.RunningSpeed.value,
      max: this.RunningSpeed.value,
      count:1,
      diff: 0, // M2,n:  sum((val-mean)^2)
});

}

然而我只是得到了零。有人能帮我调整这个功能吗?

1 个答案:

答案 0 :(得分:0)

您需要在每个RunningSpeed条目中使用getFullYear()和forEach循环:

function map() {
   this.RunningSpeed.forEach(function(data){
      var year = data.Date.getFullYear();
      emit(year, // Or put a GROUP BY key here, the group by key is Date.getFullYear()
          {sum: data.Value, // the field you want stats for
           min: data.Value,
           max: data.Value,
           count: 1,
           diff: 0, // M2,n: sum((val-mean)^2)
          });
   });
}