MongoDB distinct查询执行失败:目标主机主动拒绝连接
解决MongoDB连接成功后抛出WinError 10061的问题
这个问题我之前也碰到过,核心原因是MongoClient的懒加载特性——你看到的connected!只是成功创建了客户端对象,但真正的连接操作是在调用distinct()时才触发的,所以报错是实际连接失败导致的。下面是一步步的排查和解决方法:
确认MongoDB服务是否正在运行
Windows环境下,你可以打开服务管理器(按下Win+R输入services.msc回车),找到MongoDB相关的服务,查看它的状态是否为Running。如果没运行,右键点击选择「启动」即可。也可以用命令行启动:net start MongoDB(如果你的MongoDB服务名不是默认的
MongoDB,记得替换成实际名称)验证连接参数的正确性
检查代码里的uid_、pwd_、h(主机地址)、p_(端口号)这些变量的值是否准确:- 本地MongoDB的话,主机地址应该是
localhost或127.0.0.1,默认端口是27017,别写错了; - 可以先用MongoDB Compass或者mongo shell手动测试连接,比如执行:
如果手动连接也失败,那肯定是参数或者服务配置的问题。mongo mongodb://<你的用户名>:<你的密码>@<主机地址>:<端口>/<数据库名>
- 本地MongoDB的话,主机地址应该是
检查防火墙与安全组设置
Windows防火墙可能会阻止Python程序访问MongoDB的端口:- 可以临时关闭防火墙测试(测试完成后记得重新开启),如果关闭后能正常连接,就需要在防火墙里添加允许MongoDB端口(默认27017)的入站规则;
- 如果是连接远程MongoDB服务器,还要确认服务器的安全组已经开放了对应端口,并且允许你的客户端IP地址访问。
核对MongoDB的配置文件
打开MongoDB的配置文件(通常是mongod.cfg):- 检查
bindIp配置项,默认可能是127.0.0.1(只允许本地访问),如果是远程连接的话,需要改成0.0.0.0(允许所有IP)或者指定你的客户端IP; - 确认你使用的数据库用户拥有访问指定集合
db1和t的权限,权限不足也可能导致连接失败。
- 检查
优化代码的连接检测逻辑
因为MongoClient默认懒加载,创建对象时不会立刻验证连接,你可以在创建客户端后主动测试连接,这样能更早发现问题:try: uri = 'mongodb://' + uid_ + ':' + pwd_ + '@' + h + ':' + str(p_) client = MongoClient(uri) # 主动发送ping命令验证连接 client.admin.command('ping') print("connected successfully!") module_info = client[db1][t].distinct("module_name") for m in module_info: print(m) except Exception as e: print(f"Error: {e}")
内容的提问来源于stack exchange,提问作者Priyanka Baviskar
相关产品推荐
相关产品推荐

