我正在尝试在这样的文档中应用map reduce函数:
{
"_id": 2,
"timestamp_day": "1/20/2005 12:00:00 AM",
"variableID": "GUID",
"subscriptionID": "1",
"unit": "kWh",
"timezone": "UTC",
"sum": 0,
"numberOfRecords": 96,
"values": {
"1": 0.06232154558520836,
"2": 0.06232154558520836,
"3": 0.06232154558520836,
"4": 0.06232154558520836,
"5": 0.06232154558520836,
"6": 0.06232154558520836,
"7": 0.06232154558520836,
"8": 0.06232154558520836,
"9": 0.06232154558520836,
...
}
}
我保存信息的每一天都有文档,每个值代表一个读数。我的目标是在这个文档中应用mapReduce函数,这样我就可以检索指标,比如每天avg、每个id每天avg等等。问题是,我不知道如何做到这一点,因为values键包含一个BSONElement。
到目前为止,我的map函数如下:var mapFunction = function() {
emit(this.subscriptionID, this.values);
}
根据我对此的理解,它将被发送到减少函数中存储在值中的所有值,但是再次,因为它是一个BSON元素,我如何才能进行这些计算?每个人都要经历一次吗?性能很重要…
这是我几天前得到的,如果有人需要,我就把它放在这里。
var mapFunction = function() {
for (var key in this.values) {
emit(this.subscriptionID, this.values[key]);
}
}
在这个特殊的例子中,这个函数将把映射到一个subscriptionID的所有值作为一个数组发送给reduce函数。对于问题中的值,映射将发送如下内容:
[0.06232154558520836, 0.06232154558520836, 0.06232154558520836, ...]
希望对大家有所帮助。