MongoDB集群插入集合时遇ServerSelectionTimeoutError求助
解决MongoDB集群插入时的ServerSelectionTimeoutError问题
一、排查网络连通性问题
WinError 10060本质是网络层面的连接阻断问题,优先从以下方向排查:
- 检查防火墙与代理:确认本地防火墙未拦截27017端口的出站请求;若使用代理工具,需验证代理能正常访问MongoDB集群的节点域名(如
ac-ho1c2e3-shard-00-00.masfo3b.mongodb.net)。可通过以下命令测试连通性:
若连接失败,需调整防火墙规则或代理配置。telnet ac-ho1c2e3-shard-00-00.masfo3b.mongodb.net 27017 - 切换网络环境:如果当前使用公司内网等受限网络,尝试切换到个人热点等不受限环境,验证是否为网络限制导致的问题。
二、修正代码中的错误与优化
你的代码存在变量不匹配、连接验证缺失等问题,修正并优化后的代码如下:
import pymongo import pandas as pd import json database_name = "mydb" try: # 补充节点选择超时参数,延长等待时间 client = pymongo.MongoClient( "mongodb+srv://<user>:<password>@cluster0.masfo3b.mongodb.net/?retryWrites=true&w=majority", connectTimeoutMS=30000, socketTimeoutMS=60000, serverSelectionTimeoutMS=60000 ) # 主动执行ping命令验证连接,提前暴露问题 client.admin.command('ping') db = client[database_name] print("MongoDB 连接成功") except Exception as e: print(f"MongoDB 连接失败:{str(e)}") Coll = 'SPL' splAddressColl = db[Coll] spAddressData2 = pd.read_excel('Addresses.xlsx') records2 = json.loads(spAddressData2.T.to_json()).values() # 给插入操作添加异常捕获,明确错误类型 try: splAddressColl.insert_many(records2) splAddressColl.create_index([('Address', 'text')]) print("数据插入与索引创建成功") except pymongo.errors.ServerSelectionTimeoutError as e: print(f"插入数据时超时:{str(e)}") except Exception as e: print(f"插入数据失败:{str(e)}")
关键修正点:
- 补全缺失的
json导入,统一pandas引用为pd - 修正变量名不匹配问题:将
splColl改为splAddressColl,避免未定义错误 - 增加
client.admin.command('ping')主动验证连接,提前发现连接异常 - 配置
serverSelectionTimeoutMS参数,延长集群节点选择的超时时间 - 给插入操作添加针对性异常捕获,便于定位问题
三、检查MongoDB集群配置
- 验证IP白名单:登录MongoDB Atlas控制台,确认当前设备的公网IP已加入集群的IP白名单,未在白名单内的IP会被集群拒绝连接。
- 查看集群状态:在Atlas控制台检查所有分片节点的运行状态,确认节点无宕机、维护等异常情况。
四、更新pymongo版本
旧版本pymongo可能与MongoDB新集群存在兼容性问题,执行以下命令升级到最新稳定版:
pip install --upgrade pymongo
内容的提问来源于stack exchange,提问作者Vaibbhav Devender Kalra
相关产品推荐
相关产品推荐

