MongoDB聚合查询:提取推文Hashtag并单独分组统计
解决MongoDB中单个Hashtag分组统计的问题
问题原因
当前聚合逻辑未对$regexFindAll返回的Hashtag数组进行拆分,直接以整个数组作为分组键,导致统计的是“包含特定Hashtag组合的推文数”,而非单个Hashtag的出现频次。
修改后的聚合代码
data = db.tweets.aggregate([ { "$project": { "hashtags": { "$regexFindAll": { "input": "$content", "regex": r'#[\w-]+' } } } }, { "$unwind": "$hashtags" }, { "$group": { "_id": "$hashtags.match", "count": { "$sum": 1 } } }, { "$sort": { "count": -1 } } ])
关键步骤说明
- $project阶段:通过
$regexFindAll提取所有Hashtag,正则#[\w-]+支持匹配带连字符的完整Hashtag(如#Corona-Pandemie);将结果存入hashtags字段,结构为包含match键的对象数组。 - $unwind阶段:将每个文档的Hashtag数组拆分为独立文档,每个文档仅保留一个Hashtag对象,这是实现单个Hashtag统计的核心操作。
- $group阶段:以
$hashtags.match(单个Hashtag内容)作为分组依据,累计每个Hashtag的出现次数。 - $sort阶段:可选操作,按统计次数降序排列,便于快速定位高频Hashtag。
预期输出
针对提供的样例数据,运行后会得到如下结果:
{'_id': '#Corona', 'count': 3}, {'_id': '#Krisenjahr', 'count': 1}, {'_id': '#Legalisierung', 'count': 1}, {'_id': '#Cannabis', 'count': 1}, {'_id': '#München', 'count': 1}
内容的提问来源于stack exchange,提问作者Hadi Monzer
相关产品推荐
相关产品推荐

