首页/数据/NoSQL 速查/mongosh 连接 MongoDB 实例
MongoDB99 条

mongosh 连接 MongoDB 实例

mongosh 是官方命令行 Shell:本地默认连接 127.0.0.1:27017,远程可用 --host/--port 选项或直接传连接串;进入后可执行 JavaScript 与数据库命令。

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

mongosh 是什么

mongosh 是 MongoDB 官方命令行 Shell(2.x 起替代老版 mongo),基于 Node.js,支持 JavaScript 语法、语法高亮与自动补全。不带参数时默认连接本机 127.0.0.1:27017 并落在 test 库;远程实例可用 --host/--port 选项,也可直接传完整连接串。它既能交互式排查,也能用 --eval 在脚本里执行一次性命令。

基本信息

工具MongoDB Shell(mongosh)
默认地址127.0.0.1:27017,默认库 test
连接串mongodb://[用户:密码@]主机:端口/库?参数
认证库--authenticationDatabase 或连接串 authSource
权限连接本身不限制,能执行什么取决于账号角色

典型使用场景

  • 本地开发随手查数据、验证写入结果是否符合预期
  • 线上排障:临时执行 db.stats、rs.status、db.currentOp 等诊断命令
  • 执行一次性数据订正脚本,用 --eval 非交互运行并记录输出
  • 导入导出前确认库表结构、索引与集合规模
  • 逐步验证聚合管道,观察每个阶段的输出形态
  • 应急时做小范围读写验证,确认认证与网络是否通

常用连接方式

常用连接方式
mongosh                                              # 连接本机默认实例
mongosh --host 10.0.0.8 --port 27017                  # 指定主机与端口
mongosh --host rs0/10.0.0.8:27017 --authenticationDatabase admin -u app -p
mongosh "mongodb://app:secret@m1:27017/app?authSource=app&replicaSet=rs0"
mongosh --tls --host m1:27017 -u app --authenticationDatabase app
mongosh mongodb://127.0.0.1:27017/app --eval "db.orders.countDocuments()"   # 非交互执行
mongosh --quiet --eval "db.stats()"                   # 安静模式,只输出结果

常用启动选项

选项作用提示
--host / --port指定目标实例副本集可写多主机逗号分隔
-u / -p用户名与密码-p 不带值时交互提示输入
--authenticationDatabase指定认证所在库账号默认在其所在库认证
--tls启用 TLS 加密连接云托管实例通常强制要求
--eval非交互执行脚本适合放进定时任务与流水线
--quiet不打印欢迎与连接信息便于脚本解析输出
连接成功后提示符形如 app>,先用 db 查看当前库,再用 show dbs 与 show collections 确认上下文再写数据;退出用 exit 或 Ctrl+D。
连接串里的密码含 @ : / ? # 等字符时必须做百分号编码,否则解析失败;密码也不要直接写在命令行,会留在 shell 历史与进程列表里,交互环境用不带值的 -p。
mongosh 支持读写文件、循环与函数定义,适合做交互与轻量脚本;持续运行的生产任务仍应使用官方驱动的应用代码,便于连接池管理与错误处理。

进入后的常用命令

  • db 查看当前所在库,use 目标库 切换上下文
  • show dbs 列出数据库,show collections 列出当前库的集合
  • db.stats() 看库级对象数与存储占用,db.serverStatus() 看运行指标
  • db.currentOp() 观察正在执行的操作,用于排查慢查询与阻塞
  • load() 执行外部脚本文件,便于复用排障脚本
  • rs.status() 或 sh.status() 查看副本集与分片集群拓扑,需要相应角色

常用诊断命令

常用诊断命令
db                                       # 当前库
db.stats()                               # 库级统计:集合数、对象数、存储大小
db.orders.stats()                        # 集合级统计:文档数与索引大小
db.currentOp({ active: true })           # 正在执行的操作
db.serverStatus().connections            # 当前连接数与可用连接数
load("/opt/dba/check.js")                # 执行外部诊断脚本
在交互式 Shell 里执行 updateMany 或 deleteMany 前,先用相同条件 countDocuments 核对数量;Shell 没有撤销,误操作会直接改动真实数据。
连不上时按顺序排查:端口是否监听(ss -lntp)、认证是否失败(Authentication failed)、TLS 证书是否过期,最后再确认副本集名称与集群拓扑写法是否一致。

使用建议与边界

  • 生产环境优先用只读账号做查询,写操作前先确认当前连接落在哪个节点
  • 把常用诊断脚本存成文件用 load 调用,避免每次手敲长命令
  • 大批量导出用 mongoexport 或把 find 结果写到文件,交互式逐条打印会明显变慢
  • use 切换的库上下文只在当前会话有效,退出后不会保留
  • 长时间挂着的 Shell 会占用连接,排障结束后及时 exit 释放

易错点

  • 认证库写错时只报 Authentication failed,令人误以为密码错;先确认账号建在哪个库,再决定 authSource
  • 默认落在 test 库:不写 use 目标库就插入会把数据写进 test,命名空间混乱且后续难清理
  • 密码用 -p 明文写在命令行会进入 shell 历史与 ps 输出,交互环境用不带值的 -p 或 passwordPrompt
  • 副本集只填一个节点地址且该节点不是主节点时写入失败,用 replicaSet 参数或 mongodb+srv 让驱动自动发现主节点

数据来源与参考

  • MongoDB Manual: mongosh
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌