MongoDB MapReduce - 减少 BSONElement

MongoDB MapReduce - Reducing BSONElement

我正在尝试在这样的文档中应用 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,
    ...
   }
}

我保存信息的每一天都有文件,每个值代表一个读数。我的 objective 是在本文档中应用一个 mapReduce 函数,这样我就可以检索指标,例如每天的平均数、每个 ID 每天的平均数等等。问题是我不知道该怎么做,因为值键包含一个 BSONElement。

目前我的地图功能如下:

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

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

提前致谢。

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

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

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

[0.06232154558520836, 0.06232154558520836, 0.06232154558520836, ...]

希望对大家有所帮助。