下午好,我想知道是否有人可以帮助我。我目前正在研究使用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)
});
}
然而我只是得到了零。有人能帮我调整这个功能吗?
答案 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)
});
});
}