You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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://<你的用户名>:<你的密码>@<主机地址>:<端口>/<数据库名>
      
      如果手动连接也失败,那肯定是参数或者服务配置的问题。
  • 检查防火墙与安全组设置
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:17:31