我想按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?,但在聚合框架的上下文中)?
答案 0 :(得分:0)
目前没有任何东西可以让你像这样做:
db.col.aggregate([
{$project: {userAgentType: {$extract: /(Android|iPhone/iPad)/}}},
{$group: on_userAgentType}
]);
可能这个功能已存在于JIRA中,但我无法立即找到它。
相反,更好的方法是将用户代理字符串的“有趣”部分拆分为单独的字段,这样您就可以按userAgent.agentType
之类的内容进行分组,代表android
或ipad
或iphone
。不仅如此,你也可以使用它来预先生成$match
,这意味着你可以在这个领域使用索引,这样你的聚合通常会更高效。