2014-03-29 131 views
0

我已经继承了mongo模式,这对我来说目前很陌生,因为它包含许多集合,我相信这些集合可以轻松地整合,并且在此过程中可以增加Mongo的聚合/ MapReduce功能的使用。集合之间的聚合

基本设置如下:

12+集合。所有集合都具有可以跨集合进行比较的id,例如userId,sessionId和appId。这些集合目前是基于分析事件上下文中每个集合中的分类数据和可定制属性分开的。其中一个关键集合由一个通用用户配置文件组成,该配置文件根据传入其他集合的参数进行更新。

我经常需要汇总集合中的值来查看细节,例如自登录以来的用户会话,自上次会话以来的时间,自第一次会话以来的时间,用户跨应用程序的活跃程度,用户执行操作后的时间一个特定的事件?等等。所有这些都涉及在许多事件集合和用户集合中进行聚合。

我还没有找到足够的手段来“加入”大规模的集合user_ids。不胜感激任何有关重构架构或聚合函数以提高速度的建议。

回答

0

正如您所提到的,不可能在多个集合上执行聚合管道。因此,您必须在多个操作中执行此操作,并将每个结果都放入集合中,然后对此“工作集合”执行另一个聚合/查询。

在2.2和2.4中,您必须在应用程序代码中手动执行此项工作,但您可以在集成本身中执行此操作。

在MongoDB 2.6中,一个新运算符“$ out”已被添加到聚合框架中以帮助您执行此类操作。你可以在这里找到关于这个运营商的信息:http://docs.mongodb.org/master/reference/operator/aggregation/out/