MongoDB MapReduce - 减少BSONElement

时间:2016-09-19 11:05:03

标签: mongodb mapreduce real-time-data

我正在尝试在这样的文档中应用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函数,以便我可以检索每天平均值,每天每个平均值等平均值等指标。问题是我不知道该怎么做,因为values键包含一个BSONElement。

到目前为止,我的地图功能如下:

var mapFunction = function() {
   emit(this.subscriptionID, this.values);
}

根据我对此的理解,它将被发送以减少存储在值中的所有值的功能,但同样,因为它是BSON元素,我该如何进行这些计算?一个foreach经历每一个?表现很重要..

提前致谢。

1 个答案:

答案 0 :(得分:0)

所以我几天前就得到了,如果有人需要,我会留在这里。

var mapFunction = function() {
  for (var key in this.values) {
    emit(this.subscriptionID, this.values[key]);
  }
}

在此特定情况下,此函数将向reduce函数发送映射到一个subscriptionID的所有值作为数组。对于问题中的值,地图将发送如下内容:

[0.06232154558520836, 0.06232154558520836, 0.06232154558520836, ...]

希望它有所帮助。