0

我想汇总UserAgent

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

上面的查询将考虑整个 UserAgent字符串。我想做的是计算包含Android(选项A)、iPhone/iPad(选项B)和其余(选项C)的那些。如何将keyf函数提供给聚合框架(类似于此 -如何通过指定函数来获取密钥进行分组?但在聚合框架的上下文中)?

4

1 回答 1

0

目前没有什么可以让你做类似的事情:

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

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

而不是更好的方法是将用户代理字符串的“有趣”部分拆分为单独的字段,以便您可以按userAgent.agentType代表androidoripad或的内容进行分组iphone。不仅如此,您还可以使用它来预先生成$match,这意味着您可以在该字段上使用索引,从而使您的聚合总体上性能更高。

于 2013-03-18T14:17:38.190 回答