我在 MongoDB
上开始使用 Python
,我的 Ubuntu
中有一台 local network
机器,MongoDB
安装在那里。当我尝试使用 Python
中的 Mac
连接数据库时,它通过我出现错误。我搜索了一下,发现有一个名为 .service
的 mongod.service
需要与 mongodb.service
一起启动。但是当我尝试启动 mongod.service
时,它说 .service
甚至不存在。我用 IP 和 mongodb url 都试过了,没有任何效果。
$ sudo service mongod start
$ Failed to start mongod.service: Unit mongod.service not found.
$ sudo systemctl start mongod
$ Failed to start mongod.service: Unit mongod.service not found.
mongodb://user:password@192.168.0.106/database
#!/usr/bin/env python3
from pymongo import MongoClient
client = MongoClient('mongodb://user:password@192.168.0.106/database')
db = client['database']
collection = db['collection']
json = dict(message='hello world', token=0)
collection.insert_one(json)
pymongo.errors.ServerSelectionTimeoutError: 192.168.0.106:27017: [Errno 61] Connection refused, Timeout: 30s, Topology Description: <TopologyDescription id: 60e140982a43032aef0dd634, topology_type: Single, servers: [<ServerDescription ('192.168.0.106', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('192.168.0.106:27017: [Errno 61] Connection refused')>]>
mongodb+srv://user:password@cluster0.h9fmz.mongodb.net/database?retryWrites=true&w=majority
#!/usr/bin/env python3
from pymongo import MongoClient
client = MongoClient('mongodb+srv://user:password@cluster0.h9fmz.mongodb.net/database?retryWrites=true&w=majority')
db = client['database']
collection = db['collection']
json = dict(message='hello world', token=0)
collection.insert_one(json)
Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/pymongo/pool.py", line 1278, in _get_socket
sock_info = self.sockets.popleft()
IndexError: pop from an empty deque
During handling of the above exception, another exception occurred:
.....
.....
.....
pymongo.errors.OperationFailure: bad auth : Authentication failed., full error: {'ok': 0, 'errmsg': 'bad auth : Authentication failed.', 'code': 8000, 'codeName': 'AtlasError'}
$ mongod --auth --port 27017
$ mongod --port 27017
$ sudo rm /var/lib/mongodb/mongod.lock
$ sudo mongod --repair
答案 0 :(得分:3)
用于从本地网络中的另一台机器访问 mongodb。您需要检查以下内容:
服务器机器或客户端机器没有防火墙限制。如果有防火墙,您将需要添加规则例外以允许访问此端口。传入和传出。 (Ubuntu firewall)
您必须将 bindIp 配置添加到服务器机器中的 mongodb 配置中。请参阅文档 here。您需要添加如下内容:
net:
bindIp: 0.0.0.0
port: 27017
确保您能够使用此 IP:192.168.0.106(本地网络中的服务器)从服务器计算机本身进行连接。这将确保服务器正在侦听此 ip。
$ Failed to start mongod.service: Unit mongod.service not found.
可以找到此错误的解决方案here
mongo atlas 错误可能是由于以下原因:
您必须创建一个数据库用户才能连接到 mongodb。
您可以在左侧面板下找到它 -> Database access
-> Add user
这是因为用户名和密码不匹配。如果您的密码中有任何特殊字符,则必须url encode。