MongoDB统计代理地址对应success字段不同取值的出现频次
MongoDB 多代理成功失败次数批量统计方案
直接使用MongoDB内置的聚合管道即可一次性完成所有代理的统计需求,无需逐个查询代理,语句如下:
db.spider_results.aggregate([ { $group: { // 按代理地址分组 _id: "$proxy.proxy", // 统计success为true的次数 success_true: { $sum: { $cond: ["$success", 1, 0] } }, // 统计success为false的次数 success_false: { $sum: { $cond: ["$success", 0, 1] } } } } ])
说明
$group阶段会将所有数据按proxy.proxy字段的值聚合,每个代理地址对应一条统计结果$cond为条件表达式,符合条件时返回1计入统计,不符合则返回0- 可额外在聚合末尾添加
$sort阶段对代理地址或者统计次数排序,方便后续处理
返回结果示例
执行上述语句后会得到如下结构的结果:
[ { "_id": "196.0.1.1:1500", "success_true": 1, "success_false": 1 }, { "_id": "192.168.255.255:1500", "success_true": 2, "success_false": 0 } ]
后续只需遍历该结果,即可输出你需要的格式,比如Python处理示例:
cursor = db.spider_results.aggregate([...]) for item in cursor: proxy = item["_id"] print(f"{proxy:<22} --> success:true = {item['success_true']}") print(f"{proxy:<22} --> success:false = {item['success_false']}")
性能优化建议
如果集合数据量较大,可创建{ "proxy.proxy": 1, "success": 1 }的复合索引,进一步提升聚合查询效率。
内容的提问来源于stack exchange,提问作者jonbon
相关产品推荐
相关产品推荐

