首页/数据/NoSQL 速查/MongoDB 连接串 URI 参数
MongoDB99 条

MongoDB 连接串 URI 参数

标准连接串格式 mongodb://[用户:密码@]主机:端口/库?参数;常用参数有 authSource、replicaSet、tls、readPreference,多主机写逗号分隔。

NoSQL 速查数据更新于 2026-10-13

连接串是什么

MongoDB 连接串(URI)用一行字符串描述如何连接:协议前缀、认证信息、主机列表、目标库与一串查询参数。驱动据此完成拓扑发现、认证与读偏好选择。4.2 起支持 mongodb+srv 形式,通过 DNS SRV 记录解析集群地址,云托管实例基本都用这种写法,好处是主机变更不需要改配置。

基本信息

格式mongodb://[用户:密码@]主机[:端口][/库][?参数]
常用参数authSource / replicaSet / tls / readPreference / maxPoolSize
SRV 写法mongodb+srv:// 走 DNS SRV 记录解析集群地址
多主机主机之间用逗号分隔,驱动自动发现主节点
必填项协议与至少一个主机;其余都有默认值
编码规则用户名与密码按 RFC 3986 做百分号编码

典型使用场景

  • 应用配置里声明数据库地址与认证方式
  • 多环境区分:开发、测试、生产使用不同连接串
  • 读写分离:用 readPreference 指定从节点读
  • 副本集连接:列出多个成员让驱动自动发现主节点
  • 云数据库接入:用 mongodb+srv 简化地址维护
  • 限流保护:用 maxPoolSize 控制连接数上限

示例

示例
mongodb://app:secret@m1:27017,m2:27017/app?replicaSet=rs0&authSource=app&readPreference=secondaryPreferred
mongodb+srv://app:secret@cluster0.example.mongodb.net/app
mongodb://app:secret@m1:27017/app?tls=true&tlsCAFile=/etc/ssl/ca.pem&maxPoolSize=50
mongodb://app:secret@m1:27017/app?authSource=admin&retryWrites=true&w=majority
# 密码含特殊字符要编码:p@ss/w0rd → p%40ss%2Fw0rd

常用参数读法

参数作用注意点
authSource认证所在库账号建在哪个库就写哪个
replicaSet复制集名称写错会卡在拓扑发现
tls启用加密连接云实例通常强制要求
readPreference读偏好secondaryPreferred 可能读到旧数据
maxPoolSize连接池上限过大反而压垮数据库
retryWrites可重试写入需要写关注与拓扑支持
参数名区分大小写;密码按 RFC 3986 做百分号编码,拼装时用语言自带的 URL 编码函数最省事。
readPreference 设为 secondaryPreferred 能分担主节点压力,但复制延迟期间可能读到旧数据;强一致场景应使用 primary。
连接串里不写库名时默认落到 test;只写主机不写端口时默认 27017,容易在迁移环境时漏掉端口差异。
把含密码的连接串直接写进代码仓库是凭据外泄风险,生产环境应通过环境变量或密钥管理注入,并配置只读或最小权限账号。

配置与安全实践

  • 连接串放环境变量或配置中心,代码仓库里不出现明文密码
  • 按环境使用不同账号,生产账号只给必要权限
  • maxPoolSize 与数据库承压能力匹配,过大反而拖慢整体
  • 云实例强制 TLS 时确认证书链文件路径与主机名匹配
  • 开启 retryWrites 提升瞬时故障下的写入成功率
  • 定期轮换密码,轮换期间用双账号过渡避免业务中断

连不上排查顺序

  • 先用 mongosh 用同一条连接串连接,排除应用侧配置差异
  • 核对账号的认证库与 authSource 是否一致
  • 确认主机端口可达,排除网络策略与安全组拦截
  • 复制集场景确认 replicaSet 名称与成员地址无误
  • TLS 报错时检查证书与主机名是否匹配
  • 查看数据库侧日志的认证失败记录,确认请求是否到达服务端
replicaSet 与 directConnection 混用会改变拓扑发现方式,只在明确要直连单个节点的场景才使用 directConnection。
把连接串原样写进日志或监控上报会长期留存密码,输出前务必脱敏,这是很常见的信息泄露路径。
同一环境不要在不同应用里各自维护一套连接串:地址或参数变更时容易漏改,统一由配置中心下发能避免这类不一致。

易错点

  • replicaSet 名称写错时驱动会卡在拓扑发现阶段并反复重试,表现为连接超时而不是明确报错
  • 密码直接写进代码或脚本属于凭据外泄风险,生产环境用环境变量或密钥管理
  • 密码里含 @ : / ? # 等字符不做百分号编码会解析失败,连接串被截断后报认证错误
  • 多主机列表里混用 mongodb+srv 与前缀写法会直接报参数冲突,两种形式不能混用
  • readPreference 设成从节点读后遇到复制延迟,读到旧数据的现象会被误判为丢数据

数据来源与参考

  • MongoDB Manual: Connection Strings
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌