Navicat 连接 MongoDB 配置与报错解决
连接的配置如下图

Navicat 从 15 版本开始支持 MongoDB,但入口和连 MySQL 不是同一个:要在主界面点「连接」旁边的下拉箭头选 MongoDB,直接点连接按钮出来的是 MySQL 的表单。填的字段有这么几个:
- 连接名 — 只是本地标签,随便起,但建议带上环境,比如
mongo-local、mongo-prod,避免误连生产库。 - 连接类型 — 单机选
Standalone,副本集选Replica Set,分片集群选Sharded Cluster。这个选错会导致明明能 ping 通却连不上,因为 Navicat 的握手方式不一样。 - 主机 / 端口 — MongoDB 默认端口
27017。 - 验证方式 — 本机刚装好、没开鉴权的 MongoDB 选
无;线上库一般是Password(也就是 SCRAM)。 - 验证数据库 — 这一项最容易填错,下面单独说。
如果你手里有一条 mongodb:// 连接串,其实不用逐项填,Navicat 支持粘贴 URI 自动解析,选连接类型下面的 URI 输入即可:
mongodb://myuser:mypass@127.0.0.1:27017/mydb?authSource=admin
验证数据库填什么
MongoDB 的用户不是全局的,而是挂在某个数据库下面的。创建用户时在哪个库里执行 db.createUser(),这个用户的凭据就存在那个库里,这个库就叫「验证数据库」(authSource)。
绝大多数情况这个值是 admin,因为按惯例管理员账号都建在 admin 库下。但如果你是给某个业务库单独建的账号:
use mydb
db.createUser({
user: 'myuser',
pwd: 'mypass',
roles: [{ role: 'readWrite', db: 'mydb' }]
})
那验证数据库就得填 mydb,填 admin 会报鉴权失败。这也是 Authentication failed 最常见的原因——密码是对的,只是 Navicat 拿着密码去错的库里找用户。
连接报错:connection is being used
- 在已经保存的连接上上编辑,测试连接成功,但是点击连接就会一直提示 connection is being used
- 需要新建一个连接,才能使用,不能在已保存的上面修改
这个行为的原因是 Navicat 对 MongoDB 连接做了会话级的复用:一个连接配置在打开过之后,底层的 driver 实例会被缓存起来,你在配置面板里改了参数并「测试连接成功」,改的只是配置,缓存里那个旧实例还占着这个连接名。点连接的时候 Navicat 发现名下已经有一个在用的实例,就抛出 connection is being used。
除了新建一个连接,还有两条路可以试:
- 完全退出 Navicat 再打开。缓存跟进程生命周期绑定,重启就没了。注意 macOS 上点窗口的红叉只是关窗口,得用
Cmd + Q或者右键 Dock 图标选退出。 - 先在连接树里右键选「关闭连接」,再改配置。把实例显式释放掉,之后修改就能生效。这一步很多人漏掉,因为看着连接是灰的就以为已经断开了,其实只是折叠了目录树。
如果重启也不行,那就是配置文件里留了脏数据,这时候删掉这个连接重新建最省事——连接配置本身没什么信息量,重建的成本比排查低。
其它常见报错
Connection refused(连接被拒绝)。说明网络层就没通,MongoDB 服务没起或者端口不对。先在终端确认服务在跑:
# macOS / Linux
ps aux | grep mongod
# 看端口有没有在监听
lsof -i :27017
能连本机、连不上远程服务器。MongoDB 默认只监听 127.0.0.1,远程访问要改配置文件 mongod.conf 的 bindIp。这是安全设计,改成 0.0.0.0 之前一定要先开好鉴权和防火墙规则,否则等于把数据库裸奔在公网上——历史上大规模的 MongoDB 数据泄露基本都是这么来的。
连上了但看不到数据库列表。这是权限问题:列出所有数据库需要 listDatabases 权限,普通业务账号一般只有自己那个库的读写权。这种情况下手动在 Navicat 里输入库名打开就行,不影响正常操作。
要不要用 Navicat 连 MongoDB
Navicat 的优势是界面统一,一个工具管所有数据库,习惯了 MySQL 那套交互不用另学。但它对 MongoDB 的支持终究是后加的,聚合管道调试、索引分析这些偏 MongoDB 特性的功能不如专用工具顺手。
如果 MongoDB 是主力库,MongoDB 官方的 Compass 更值得装:免费、有内置的聚合管道可视化构建器、explain 的执行计划展示也更直观。命令行党直接用 mongosh 就够了。我的用法是 Navicat 做日常的数据浏览和改单条记录,写复杂聚合查询的时候切到 Compass。

还没有留言,来发表第一条吧~