MongoDB MapReduce日期范围内的标准偏差



下午好,我想知道是否有人能帮助我。我目前正在研究使用MongoDB聚合框架和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帖子,并提出了这个URLhttps://gist.github.com/RedBeard0531/1886960,这似乎就是我要找的。

关于背景,我想做的就是生成一张每年的可持续发展图表。

当前函数每年只考虑整个值。我已经将map函数更改为,不知道将group日期函数放在哪里。

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)
});

}

然而,我只得到零分。有人能帮我调整一下这个功能吗?

您需要在每个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)
          });
   });
}

相关内容

  • 没有找到相关文章

最新更新