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 释放