我有一个流程,我目前正在使用Mongo的Map / Reduce框架,但它的表现并不是很好。这是一个非常简单的聚合,我在3个字段上进行bucketize,返回4个不同字段的总和,并传递另外4个字段的值(在每个桶中都是常量)。
由于[Map-Reduce performance in MongoDb 2.2, 2.4, and 2.6]中描述的原因,我想将其转换为聚合框架以获得更好的性能,但我认为有三件事情存在:
MapReduceCommand.OutputType
的{{1}}(在Java中)映射/缩小,与我的用例完全匹配,但我看不到聚合框架中的相应功能。在聚合框架中有没有很好的方法来解决这些问题?服务器现在是版本2.4.3 - 如果有新功能,我们可以根据需要进行更新。
答案 0 :(得分:3)
您现在可以使用$out执行此操作,如mongo
中所述$ out获取聚合管道返回的文档并将它们写入指定的集合。 $ out运算符允许聚合框架返回任何大小的结果集。 $ out运算符必须是管道中的最后一个阶段。
该命令具有以下语法,其中包含将保存聚合操作输出的集合。 $ out仅在管道末端允许:
db.<collection>.aggregate( [
{ <operation> },
{ <operation> },
...,
{ $out : "<output-collection>" }
] )
答案 1 :(得分:1)
聚合框架目前无法直接输出到其他集合。但是你可以在这个讨论中尝试答案: SO-questions-output aggregate to new collection mapreduce更慢,我也一直在等待解决方案。您可以尝试使用madoodb网站支持的Hadoop到Mongodb连接器。 Hadoop在mapreduce上更快。但我不知道它是否适合您的具体情况。
Link to hadoop + MongoDB connector
一切顺利。