我想通过UserAgent
聚合:
db.reports.aggregate(
{
$group: {
_id: '$UserAgent',
docsPerUserAgent: {
$sum : 1
}
}
}
)
上面的查询将考虑整个 UserAgent
字符串。我想做的是计算那些包含Android(选项A), iPhone/iPad(选项B)和其余的(选项C)。我怎么能提供keyf
函数到聚合框架(类似于这-如何通过指定一个函数来获取一个键组?但是在聚合框架的上下文中)? 目前还没有允许您做这样的事情:
db.col.aggregate([
{$project: {userAgentType: {$extract: /(Android|iPhone/iPad)/}}},
{$group: on_userAgentType}
]);
也许这个功能在JIRA中已经存在了,但是我不能立即找到它。
相反,更好的方法是将用户代理字符串的"有趣"部分分割成单独的字段,这样您就可以按userAgent.agentType
(代表android
或ipad
或iphone
)进行分组。不仅如此,您还可以使用它来事先生成$match
,这意味着您可以在该字段上使用索引,从而使您的聚合性能更高。