MongoDB 连接全攻略
(MongoDB 8.0+,2025 年最新实践)
连接 MongoDB 是开发、运维、测试的第一步。本文覆盖 所有平台、所有工具、所有场景 的连接方式,带你从 localhost 到 Atlas 云集群,从 mongosh 到 Node.js/Python/Java。
一、连接字符串(URI)格式大全
| 类型 | 格式 | 示例 |
|---|---|---|
| 标准连接 | mongodb://[user:pass@]host:port[/db]?options | mongodb://localhost:27017 |
| 带认证 | mongodb://user:pass@host:port/db?authSource=admin | mongodb://admin:123@192.168.1.10:27017/company |
| 副本集 | mongodb://host1,host2,host3/db?replicaSet=rs0 | mongodb://node1:27017,node2:27017/?replicaSet=rs0 |
| SRV(Atlas) | mongodb+srv://user:pass@cluster.xxxxx.mongodb.net/db | mongodb+srv://app:P@ss@cluster0.xxxxx.mongodb.net/shop |
| TLS/SSL | ?tls=true&tlsAllowInvalidCertificates=true | mongodb://host:27017/?tls=true |
注意:密码含特殊字符(如
@,:,/)需 URL 编码@→%40|:→%3A|/→%2F
二、命令行连接(mongosh)
1. 本地连接(默认)
mongosh
# 等价于:mongosh "mongodb://127.0.0.1:27017"
2. 远程 + 认证
mongosh -u admin -p YourPass123 --authenticationDatabase admin --host 192.168.1.100
3. 连接字符串方式(推荐)
mongosh "mongodb://admin:YourPass123@192.168.1.100:27017/admin?authSource=admin"
4. Atlas 云连接
mongosh "mongodb+srv://admin:YourPass123@cluster0.xxxxx.mongodb.net/myDB"
三、编程语言连接(Driver)
| 语言 | 官方 Driver | 连接代码示例 |
|---|---|---|
| Node.js | mongodb | “`js |
| const { MongoClient } = require(‘mongodb’); | ||
| const uri = “mongodb://admin:pass@localhost:27017/company?authSource=admin”; | ||
| const client = new MongoClient(uri); | ||
| await client.connect(); | ||
| const db = client.db(“company”); |
| **Python** | `pymongo` | ```python
from pymongo import MongoClient
client = MongoClient("mongodb://admin:pass@localhost:27017/company?authSource=admin")
db = client.company
|
| Java | mongodb-driver-sync | “`java
MongoClient client = MongoClients.create(“mongodb://admin:pass@localhost:27017/company?authSource=admin”);
MongoDatabase db = client.getDatabase(“company”);
| **Go** | `go.mongodb.org/mongo-driver` | ```go
client, _ := mongo.Connect(context.TODO(), options.Client().ApplyURI(uri))
db := client.Database("company")
|
所有 Driver 都支持标准 URI,推荐使用连接字符串。
四、GUI 工具连接
| 工具 | 连接方式 |
|---|---|
| MongoDB Compass | 粘贴完整 URI → Connect |
| VS Code + MongoDB Extension | mongodb://... 或 mongodb+srv://... |
| TablePlus | 新建 → MongoDB → 填写 Host/Port/User |
| Robo 3T / Studio 3T | 支持 URI 和表单 |
五、常见连接场景
1. 本地开发(无认证)
mongosh
# 或
MongoClient("mongodb://localhost:27017")
2. 生产环境(带认证 + TLS)
mongodb://app_user:SecureP@ss2025@db-prod.example.com:27017/shop?
authSource=admin
&tls=true
&tlsCAFile=/path/to/ca.pem
&retryWrites=true
&w=majority
3. 副本集高可用连接
mongodb://node1:27017,node2:27017,node3:27017/mydb?
replicaSet=rs0
&readPreference=primaryPreferred
4. 分片集群(通过 mongos)
mongodb://mongos1:27017,mongos2:27017/?readPreference=secondary
六、连接参数详解(Query Options)
| 参数 | 说明 | 推荐值 |
|---|---|---|
authSource | 认证数据库 | admin |
retryWrites | 自动重试写操作 | true |
w | 写关注 | majority |
readPreference | 读偏好 | primary / secondary |
maxPoolSize | 连接池大小 | 50 |
connectTimeoutMS | 连接超时 | 10000 |
serverSelectionTimeoutMS | 选主超时 | 30000 |
tls / ssl | 启用 TLS | true |
推荐生产连接串:
mongodb://user:pass@host:27017/db?
authSource=admin
&retryWrites=true
&w=majority
&readPreference=primaryPreferred
&tls=true
七、连接池与性能优化
| 设置 | 建议 |
|---|---|
| 连接池大小 | 业务高峰 QPS × 平均响应时间(秒) |
| 心跳频率 | serverMonitoringMode=stream(新版默认) |
| 负载均衡 | 多个 host 用逗号分隔,Driver 自动轮询 |
| 压缩 | compressors=zlib,snappy 节省带宽 |
&maxPoolSize=100
&compressors=zstd,snappy,zlib
&zlibCompressionLevel=6
八、故障排查(Connection Issues)
| 症状 | 检查点 | 解决方案 |
|---|---|---|
Connection refused | 端口、防火墙、mongod 是否运行 | netstat -tlnp | grep 27017 |
Authentication failed | 用户名、密码、authSource | 用 mongosh -u admin -p 测试 |
Server selection timeout | 网络、分片节点存活 | ping + mongosh --host |
TLS handshake failed | 证书路径、过期 | 检查 tlsCAFile |
not authorized | 权限不足 | 检查用户 roles |
诊断命令:
# 查看 MongoDB 状态
sudo systemctl status mongod
# 查看日志
tail -f /var/log/mongodb/mongod.log
# 测试网络
telnet 192.168.1.100 27017
九、连接安全最佳实践
| 实践 | 操作 |
|---|---|
| 启用认证 | security.authorization: enabled |
| 使用 TLS | 生产必须加密传输 |
| IP 白名单 | 防火墙只允许应用服务器 |
| 最小权限用户 | 应用只给 readWrite 当前库 |
| 密码轮换 | 每 90 天 |
| 审计登录 | 开启 auditLog |
十、快速连接模板
# 1. 本地开发
mongosh
# 2. 生产应用(Node.js)
const uri = "mongodb://shop_app:Shop2025!@db-prod:27017/shop?authSource=admin&retryWrites=true&w=majority";
# 3. Atlas
mongosh "mongodb+srv://admin:Admin2025!@cluster0.xxxxx.mongodb.net"
# 4. Docker 本地测试
docker run -d -p 27017:27017 --name mongo mongo:8.0
mongosh
总结:连接三要素
graph LR
A[连接字符串] --> B[认证 authSource=admin]
B --> C[安全 tls=true]
C --> D[高可用 replicaSet / SRV]
一句话口诀:
“URI 写全,认证必开,TLS 加密,高可用选 SRV”
如需 连接池调优脚本、Kubernetes 中连接、从 MySQL 迁移连接逻辑 或 多租户连接隔离,欢迎继续提问!