MongoDB Shell(mongosh)完整指南
当前最新版本:mongosh 2.3+(2025 年 11 月)
mongosh 是 MongoDB 官方新一代交互式 Shell,替代旧版 mongo(已于 MongoDB 6.0 废弃)。
它支持 现代 JavaScript(ES2023+)、异步操作、语法高亮、自动补全、内置帮助,是开发、调试、运维的首选工具。
一、安装 mongosh(独立或随 MongoDB 安装)
| 平台 | 安装方式 |
|---|---|
| macOS | brew install mongosh |
| Windows | 随 MSI 安装包自动安装,或下载:mongosh.msi |
| Linux | “`bash |
| Docker | docker run -it --rm mongosh |
| NPM | npm install -g mongosh |
提示:MongoDB 8.0 安装包已默认包含
mongosh,无需单独安装。
二、基本连接方式
# 1. 本地默认连接(127.0.0.1:27017)
mongosh
# 2. 指定主机和端口
mongosh --host localhost --port 27017
# 3. 连接远程服务器
mongosh "mongodb://user:pass@192.168.1.100:27017"
# 4. 连接副本集(自动发现)
mongosh "mongodb://host1:27017,host2:27017,host3:27017/?replicaSet=rs0"
# 5. 连接 Atlas 云数据库
mongosh "mongodb+srv://user:pass@cluster0.xxxxx.mongodb.net/myDatabase"
三、常用命令速查表
| 命令 | 功能 |
|---|---|
use <db> | 切换数据库 |
show dbs | 列出所有数据库 |
show collections | 列出当前库的集合 |
db.<collection>.find() | 查询文档 |
db.<collection>.insertOne({...}) | 插入单文档 |
db.<collection>.insertMany([...]) | 插入多文档 |
db.<collection>.updateOne() / updateMany() | 更新 |
db.<collection>.deleteOne() / deleteMany() | 删除 |
db.<collection>.countDocuments({}) | 计数 |
db.<collection>.aggregate([...]) | 聚合管道 |
cls 或 clear() | 清屏 |
exit 或 Ctrl+C | 退出 |
四、核心操作示例
1. 插入数据
use company
db.employees.insertOne({
name: "张三",
age: 30,
department: "技术部",
skills: ["JavaScript", "MongoDB"],
address: { city: "上海", zip: "200000" }
})
2. 查询
// 精确匹配
db.employees.find({ name: "张三" }).pretty()
// 条件查询
db.employees.find({ age: { $gt: 25 } }).pretty()
// 投影(只返回 name 和 department)
db.employees.find({}, { name: 1, department: 1, _id: 0 })
// 正则搜索
db.employees.find({ name: /李/ })
3. 更新
// 更新单个文档
db.employees.updateOne(
{ name: "张三" },
{ $set: { age: 31 }, $push: { skills: "Python" } }
)
// 替换整个文档
db.employees.replaceOne(
{ name: "张三" },
{ name: "张三", age: 31, role: "高级工程师" }
)
4. 删除
db.employees.deleteOne({ name: "张三" })
db.employees.deleteMany({ age: { $lt: 20 } })
5. 聚合管道(Aggregation)
db.sales.aggregate([
{ $match: { status: "completed" } },
{ $group: { _id: "$product", total: { $sum: "$amount" } } },
{ $sort: { total: -1 } },
{ $limit: 5 }
])
五、高级功能
1. 异步操作(async/await)
// 查找并立即处理结果
const docs = await db.employees.find({ age: { $gt: 25 } }).toArray()
docs.forEach(d => console.log(d.name))
2. 编辑器模式(edit)
edit myQuery // 打开 $EDITOR 编辑变量
// 粘贴复杂查询,保存后自动执行
3. 加载外部 JS 文件
mongosh --file script.js
// script.js
use testdb
db.users.insertMany([
{ name: "A" }, { name: "B" }
])
print("导入完成")
4. 密码安全输入
mongosh --username admin --password
# 或使用环境变量
export MONGODB_URI="mongodb://admin:pass@localhost:27017"
mongosh $MONGODB_URI
六、配置 mongosh(~/.mongoshrc.js)
创建配置文件增强体验:
// ~/.mongoshrc.js
// 启用语法高亮(需安装 chalk)
config.set("colorize", true)
// 设置默认编辑器
config.set("editor", "code") // VS Code
// 自定义提示符
prompt = () => {
const db = db.getName()
return `${db}> `
}
// 启动时自动连接
// connect("mongodb://localhost:27017/mydb")
七、与旧版 mongo 对比
| 特性 | mongo(旧) | mongosh(新) |
|---|---|---|
| JavaScript 引擎 | V8(同步) | Node.js(支持 async) |
| 语法高亮 | 无 | 支持 |
| 自动补全 | 基础 | 智能补全(字段、方法) |
| 聚合管道预览 | 无 | db.collection.aggregate(...).pretty() |
| 配置文件 | .mongorc.js | .mongoshrc.js |
| 状态 | 已废弃 | 官方推荐 |
八、实用技巧
| 技巧 | 命令 |
|---|---|
| 查看当前数据库 | db |
| 查看操作历史 | history |
| 查看最后操作状态 | db.getLastError() |
| 导出为 JSON | mongosh --quiet --eval 'printjson(db.collection.find().toArray())' > data.json |
| 性能分析 | db.collection.find().explain("executionStats") |
| 创建索引 | db.collection.createIndex({ field: 1 }) |
九、常见问题(FAQ)
| 问题 | 解决方案 |
|---|---|
mongosh: command not found | 添加到 PATH:export PATH="$PATH:/opt/homebrew/bin" |
| 连接超时 | 检查防火墙、MongoDB 是否运行、端口 27017 |
| 认证失败 | 使用 --authenticationDatabase admin |
无法使用 await | 确保在 async 上下文或直接在 shell 中使用 |
十、推荐学习资源
| 资源 | 链接 |
|---|---|
| 官方文档 | https://www.mongodb.com/docs/mongodb-shell/ |
| 交互式教程 | https://learn.mongodb.com |
| VS Code 插件 | MongoDB for VS Code |
| GUI 替代 | MongoDB Compass |
总结:一句话掌握 mongosh
“mongosh = 现代 JavaScript + 智能补全 + 异步操作 + 彩色输出”
快速上手三步:
mongosh
use mydb
db.test.insertOne({ hello: "mongosh" })
如需 mongosh 脚本自动化、批量导入导出、与 Node.js 集成 或 性能调优命令,欢迎继续提问!