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,
    ...
   }
}

我保存信息的每一天都有文档,每个值代表一个读数。我的目标是在这个文档中应用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, ...]

希望对大家有所帮助。

相关内容

  • 没有找到相关文章

最新更新