0

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

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

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

根据我的理解,它将被发送到减少函数中存储的所有值,但同样,因为它是一个 BSON 元素,我该如何进行这些计算?一个 foreach 遍历每个?性能很重要。。

提前致谢。

4

1 回答 1

0

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

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

在这种特殊情况下,此函数会将映射到一个订阅 ID 的所有值作为数组发送到 reduce 函数。对于问题中的值,地图将发送如下内容:

[0.06232154558520836, 0.06232154558520836, 0.06232154558520836, ...]

希望它可以帮助某人。

于 2016-09-22T10:19:52.880 回答