2012-03-14 60 views
1

我正在尝试创建几个基于mongoDB的显示日期相关信息的报告。例如,我需要显示过去30天内每天用户的注册数量。每个用户文档都有一个注册日期字段。我需要在报告中显示每天匹配记录(总和)的数量。基于MongoDB中的数据创建报告

是map-reduce一个选项吗?还是太重了?

有关如何处理的任何建议?

我正在使用spring访问mongo。但我的问题更多的是关于如何查询mongoDB。

+0

MongoDB有能力以类似的方式[GROUP()] [1]记录SQL GROUP BY会做。但是在那些文档中他们提到你应该使用[map/reduce] [2]来代替。 – 2012-03-14 14:12:45

+0

[1]:http://www.mongodb.org/display/DOCS/Aggregation#Aggregation-Group [2]:http://www.mongodb.org/display/DOCS/MapReduce – 2012-03-14 14:12:55

+0

谢谢,但有途径仅对日期对象执行查询'yyyy-MM-dd'并忽略'HH:mm:ss' – 2012-03-14 16:52:18

回答

1

的Map/Reduce是非常灵活,可以做的事情,会使用其他技术是困难的,但如果不灵活的方法,你需要的东西也不会那么快或资源利用率高的不太灵活的方法。我认为这是“沉重”的想法的来源。您可以编写一个map/reduce函数来执行db.collection.find({a:1})。count(),但count()解决方案会更快。

从你的描述,地图/减少像一个合理的做法声音。如果您需要,它可以灵活地根据文档中的其他字段调整分组,如果文档不够统一,这可能会有所帮助。 map/reduce作业会给服务器增加负载,所以如果您几乎无法跟上高速插入或更新,它可能不是一个好的补充,但这适用于任何增加的工作负载。如果你有能力做到这一点,测试和评估性能影响是最好的计划。