0

我试图弄清楚如何用 Mongo 做一些事情,但收效甚微。

我正在使用 maReduce 函数来总结我正在从事的项目的电力使用情况。我对每个帐户进行了总结。

我有一个集合中每个帐户的每小时用电量日志,我使用 map reduce 函数生成另一个集合,如下所示:

{
_id: (account_id)
value: {watts: (sum of all watts in existence in other collection)}
}

我现在还使用了一个 mapReduce,它对此进行增量添加,因此我可以每小时添加到这个聚合中,而不是每次都重新计算。

我想知道的是如何朗姆酒,这样我就可以计算出当年的瓦特使用量,并将其插入到每个文档中的 values 对象中。当然,我想为每个帐户都这样做。

我知道如何通过 mapReduce 收集数据,以生成如下所示的文档:

{
_id: (account_id)
value: {watts_this_year: some_num}
}

我只是不确定如何将它合并到我制作的收藏中。

我想合并它们看起来像:

{
_id: (account_id)
value: {watts_this_year: some_num, watts: (sum of all watts in existence in other collection)}
}

我是否清楚地传达了自己?请让我知道我是否可以做任何其他事情来使我的问题更清楚。

谢谢!

4

1 回答 1

0

MapReduce 不适用于增量更新。它是一种一次性工具,可以搅动大量数据并返回结果。我实际上建议您看看使用聚合框架是否足够快以实时执行此操作。它比 M/R 快得多。

例如,您上面的示例将通过以下聚合调用表示:

db.collName.aggregate( { $group: { '_id': '$_id', watts: { $sum: '$watts' } } } );

A/F 比 M/R 快,因为它是用 C 实现的,并且可以运行并发作业。目前的不利方面是它不会将其结果输出到新集合中,但目前正在处理中:https ://jira.mongodb.org/browse/SERVER-3253

于 2013-06-23T16:16:32.613 回答