Mongodb ServerSelectionTimeoutError:通过pymongo连接到Atlas时发生超时错误
我正试图通过pymongo连接到我的Atlas mongodb数据库。我建立了连接并进行了一次基本的查询,只是为了计算文档的数量,然后它就超时了 我能够在我的个人linux上运行相同的字符串(并设法从一个干净的Docker上运行),但没有设法从我用于工作的Mac上运行它(我的同事和我也不能使它在干净的Docker映像中运行)。如果重要的话,我正在运行我安装的Mongodb ServerSelectionTimeoutError:通过pymongo连接到Atlas时发生超时错误,mongodb,pymongo,mongodb-atlas,Mongodb,Pymongo,Mongodb Atlas,我正试图通过pymongo连接到我的Atlas mongodb数据库。我建立了连接并进行了一次基本的查询,只是为了计算文档的数量,然后它就超时了 我能够在我的个人linux上运行相同的字符串(并设法从一个干净的Docker上运行),但没有设法从我用于工作的Mac上运行它(我的同事和我也不能使它在干净的Docker映像中运行)。如果重要的话,我正在运行我安装的pip安装pymongo[tls]的pymongo 3.8。我也尝试了降级,还尝试了pip安装pymongo[tls,srv] 个人猜测:可
pip安装pymongo[tls]
的pymongo 3.8
。我也尝试了降级,还尝试了pip安装pymongo[tls,srv]
个人猜测:可能与代理/防火墙阻止连接有关?我检查了服务器上的端口是否打开,并将0.0.0.0/0
列为白名单,所以这不应该是问题所在
import pymongo
client = pymongo.MongoClient("mongodb+srv://whatever:yep@cluster0-xxxxx.mongodb.net/test?retryWrites=true")
client.test.matches.count_documents({}) # this blocks and then errors
我得到以下错误
/usr/local/lib/python3.7/site-packages/pymongo/collection.py in count_documents(self, filter, session, **kwargs)
1693 collation = validate_collation_or_none(kwargs.pop('collation', None))
1694 cmd.update(kwargs)
-> 1695 with self._socket_for_reads(session) as (sock_info, slave_ok):
1696 result = self._aggregate_one_result(
1697 sock_info, slave_ok, cmd, collation, session)
/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/contextlib.py in __enter__(self)
110 del self.args, self.kwds, self.func
111 try:
--> 112 return next(self.gen)
113 except StopIteration:
114 raise RuntimeError("generator didn't yield") from None
/usr/local/lib/python3.7/site-packages/pymongo/mongo_client.py in _socket_for_reads(self, read_preference)
1133 topology = self._get_topology()
1134 single = topology.description.topology_type == TOPOLOGY_TYPE.Single
-> 1135 server = topology.select_server(read_preference)
1136
1137 with self._get_socket(server) as sock_info:
/usr/local/lib/python3.7/site-packages/pymongo/topology.py in select_server(self, selector, server_selection_timeout, address)
224 return random.choice(self.select_servers(selector,
225 server_selection_timeout,
--> 226 address))
227
228 def select_server_by_address(self, address,
/usr/local/lib/python3.7/site-packages/pymongo/topology.py in select_servers(self, selector, server_selection_timeout, address)
182 with self._lock:
183 server_descriptions = self._select_servers_loop(
--> 184 selector, server_timeout, address)
185
186 return [self.get_server_by_address(sd.address)
/usr/local/lib/python3.7/site-packages/pymongo/topology.py in _select_servers_loop(self, selector, timeout, address)
198 if timeout == 0 or now > end_time:
199 raise ServerSelectionTimeoutError(
--> 200 self._error_message(selector))
201
202 self._ensure_opened()
ServerSelectionTimeoutError: cluster0-shard-00-01-eflth.mongodb.net:27017: timed out,cluster0-shard-00-00-eflth.mongodb.net:27017: timed out,cluster0-shard-00-02-eflth.mongodb.net:27017: timed out
您是否能够使用相同的连接URI从同一台机器使用
mongo
shell连接到服务器?就像一个数据点一样-我遇到了与linux工作而mac不工作相同的问题。我可以访问web UI,但VPN阻止了mongodb连接;看起来此错误确实表明存在连接问题。