我继承了一个mongo架构,这个架构目前对我很陌生,因为它包含许多我认为可以很容易合并的集合,并且在此过程中可以增加Mongo的聚合/ MapReduce功能的使用。
基本设置如下:
12个以上的收藏品。所有集合都具有可以跨集合(例如userId,sessionId和appId)进行比较的ID。目前,集合基于分析事件上下文中每个集合中的分类数据和可自定义属性进行分隔。其中一个关键集合包含一般用户配置文件,该配置文件根据传递到其他集合的参数进行更新。
我经常需要在集合中聚合值来查看详细信息,例如自登录以来的用户会话,自上次会话以来的时间,自第一个会话以来的时间,用户在应用程序之间的活跃程度,自用户执行以来已有多长时间具体事件?所有这些都涉及聚合许多事件集合和用户集合。
我还没有找到足够的方法来加入" user_ids在规模上跨集合。任何关于重构模式或聚合函数的建议都可以使这一点更快。
答案 0 :(得分:0)
如您所述,无法在多个集合上执行聚合管道。因此,您必须在多个操作中执行此操作,并将每个结果放在一个集合中,并在此工作集合上执行另一个聚合/查询"。
在2.2和2.4中,你必须在你的应用程序代码中手动完成这项工作,但是你可以在agregation本身中做到这一点。
在MongoDB 2.6中,新的运营商" $ out "已添加到聚合框架中以帮助您执行此类操作。您可以在此处找到有关此运算符的信息:http://docs.mongodb.org/master/reference/operator/aggregation/out/