如何为组聚合指定关键功能

时间:2013-03-18 12:14:49

标签: mongodb aggregation-framework

我想按UserAgent汇总:

db.reports.aggregate(
    {
        $group: {
            _id: '$UserAgent',
            docsPerUserAgent: {
                $sum : 1
            }
        }
    }
)

上述查询会考虑整个 UserAgent字符串。我想做的是计算那些包含 Android (选项A), iPhone / iPad (选项B)和其他(选项C)的内容。如何将keyf函数提供给聚合框架(类似于此 - How to group by specifying a function to fetch a key?,但在聚合框架的上下文中)?

1 个答案:

答案 0 :(得分:0)

目前没有任何东西可以让你像这样做:

db.col.aggregate([
    {$project: {userAgentType: {$extract: /(Android|iPhone/iPad)/}}},
    {$group: on_userAgentType}
]);

可能这个功能已存在于JIRA中,但我无法立即找到它。

相反,更好的方法是将用户代理字符串的“有趣”部分拆分为单独的字段,这样您就可以按userAgent.agentType之类的内容进行分组,代表androidipadiphone。不仅如此,你也可以使用它来预先生成$match,这意味着你可以在这个领域使用索引,这样你的聚合通常会更高效。