用PyMongo聚合查询MongoDB推特数据获取用户提及关系及次数
调整后的聚合管道写法
你原来的管道没有保留发推作者字段,且分组维度仅为被提及用户,调整后管道如下:
tweets.aggregate([ # 同时保留发推作者和提及用户列表 { '$project': { 'author': '$user.screen_name', 'mentions': '$entities.user_mentions.screen_name', '_id': 0 } }, # 拆分提及列表,每个提及单独成一条文档 {'$unwind': '$mentions'}, # 按「作者+被提及用户」的组合分组统计次数 { '$group': { '_id': { 'author': '$author', 'mentioned': '$mentions' }, 'count': {'$sum': 1} } }, # 调整输出字段格式匹配你的需求 { '$project': { 'author': '$_id.author', 'mentioned': '$_id.mentioned', 'count': 1, '_id': 0 } } ])
逻辑说明
- 第一阶段
$project新增了author字段,保留每条推文的发件人screen_name,同时保留原有的提及用户列表 $unwind阶段不变,把单条推文里的多个@用户拆分为独立的记录行$group阶段不再仅以被提及用户为分组键,改为「发件人+被提及用户」的复合键,这样就能统计到每个发件人对特定用户的提及次数- 最后新增的
$project阶段把复合主键里的字段提取到顶层,输出结构就和你预期的完全一致
如果同一个作者多次提及同一个用户,count字段会自动累加,符合用户提及网络的构建需求。
内容的提问来源于stack exchange,提问作者botti23
相关产品推荐
相关产品推荐

