使用Mongo合并到大型集合中

时间:2013-06-20 18:22:40

标签: mongodb nosql

我正在试图弄清楚如何用Mongo做点什么并没什么成功。

我正在使用maReduce函数来总结我正在处理的项目的电源使用情况。我按照帐户总结了它。

我每小时都会记录一个集合中每个帐户的耗电量,并使用map reduce函数生成另一个看起来像这样的集合:

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

我现在也使用mapReduce对它进行增量添加,这样我就可以每小时添加一次这个聚合,而不是每次重新计算。

我想知道的是如何朗读某些东西,以便我可以计算当前年份的瓦特用量,并将其插入每个文档中的值对象中。当然,我想为每个帐户执行此操作。

我知道如何通过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)}
}

我是否清楚地表达了自己的意见?如果我能做些什么可以让我的问题更清楚,请告诉我。

谢谢!

1 个答案:

答案 0 :(得分: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