首页 > 解决方案 > 使用 Python (Pycharm) 在 mac 上连接到 MongoDB

问题描述

我正在尝试使用 Pycharm 在我的 Mac 上连接到 MongoDB。我既有 MongoDB 的 Atlas 帐户,也有一个虚拟机 (Linux)。我收到以下错误,我认为它与连接无关,而是与 Mac 上的 MongoDB 安装问题有关。我使用该代码并尝试通过“Mongo+srv URI”进行连接时收到以下错误。

我曾尝试在终端、MongoDB 社区等中使用 brew 安装不同版本的 MongoDB。如果有人有任何想法,那将是一个很大的帮助。

Mac OS Catalina,10.15.7。我目前安装了 Mongo shell:

MongoDB shell version v4.2.0
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("6a310523-2d54-4f4a-b70c-697429ed25ef") }
MongoDB server version: 4.4.1
WARNING: shell and server versions do not match
import pymongo
from pymongo import MongoClient
import dns

client = MongoClient('192.168.56.30', 27017)

db = client.test_database

collection = db.test_collection

import datetime
post = {"author": "Mike",
    "text": "My first blog post!",
    "tags": ["mongodb", "python", "pymongo"],
    "date": datetime.datetime.utcnow()}

posts = db.posts
post_id = posts.insert_one(post).inserted_id  #after this, you get "statement seems to have no effect"
post_id

Traceback (most recent call last):
  File "/Users/Graeme/Documents/NCI/Project/venv/lib/python3.7/site-packages/IPython/core/interactiveshell.py", line 3418, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-11-caf04adc7485>", line 1, in <module>
    post_id = posts.insert_one(post).inserted_id
  File "/Users/Graeme/Documents/NCI/Project/venv/lib/python3.7/site-packages/pymongo/collection.py", line 701, in insert_one
    session=session),
  File "/Users/Graeme/Documents/NCI/Project/venv/lib/python3.7/site-packages/pymongo/collection.py", line 615, in _insert
    bypass_doc_val, session)
  File "/Users/Graeme/Documents/NCI/Project/venv/lib/python3.7/site-packages/pymongo/collection.py", line 603, in _insert_one
    acknowledged, _insert_command, session)
  File "/Users/Graeme/Documents/NCI/Project/venv/lib/python3.7/site-packages/pymongo/mongo_client.py", line 1497, in _retryable_write
    with self._tmp_session(session) as s:
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/contextlib.py", line 112, in __enter__
    return next(self.gen)
  File "/Users/Graeme/Documents/NCI/Project/venv/lib/python3.7/site-packages/pymongo/mongo_client.py", line 1829, in _tmp_session
    s = self._ensure_session(session)
  File "/Users/Graeme/Documents/NCI/Project/venv/lib/python3.7/site-packages/pymongo/mongo_client.py", line 1816, in _ensure_session
    return self.__start_session(True, causal_consistency=False)
  File "/Users/Graeme/Documents/NCI/Project/venv/lib/python3.7/site-packages/pymongo/mongo_client.py", line 1766, in __start_session
    server_session = self._get_server_session()
  File "/Users/Graeme/Documents/NCI/Project/venv/lib/python3.7/site-packages/pymongo/mongo_client.py", line 1802, in _get_server_session
    return self._topology.get_server_session()
  File "/Users/Graeme/Documents/NCI/Project/venv/lib/python3.7/site-packages/pymongo/topology.py", line 488, in get_server_session
    None)
  File "/Users/Graeme/Documents/NCI/Project/venv/lib/python3.7/site-packages/pymongo/topology.py", line 217, in _select_servers_loop
    (self._error_message(selector), timeout, self.description))
pymongo.errors.ServerSelectionTimeoutError: 192.168.56.30:27017: timed out, Timeout: 30s, Topology Description: <TopologyDescription id: 5fc8ea820dbfa3f7af8ea3ac, topology_type: Single, servers: [<ServerDescription ('192.168.56.30', 27017) server_type: Unknown, rtt: None, error=NetworkTimeout('192.168.56.30:27017: timed out')>]>

```


标签: pythonmongodbmacosmacos-catalinamongo-shell

解决方案


您需要确保为外部连接设置了 MongoDB(默认情况下不是)。

它可能涉及编辑您的 mongod.conf 文件并设置 bind_ip_all 标志。

请参阅https://docs.mongodb.com/manual/core/security-mongodb-configuration/

https://docs.mongodb.com/manual/reference/configuration-options/


推荐阅读