MongoDB Shell

MongoDB Shell(mongosh)完整指南

当前最新版本mongosh 2.3+(2025 年 11 月)

mongoshMongoDB 官方新一代交互式 Shell,替代旧版 mongo(已于 MongoDB 6.0 废弃)。
它支持 现代 JavaScript(ES2023+)异步操作语法高亮自动补全内置帮助,是开发、调试、运维的首选工具。


一、安装 mongosh(独立或随 MongoDB 安装)

平台安装方式
macOSbrew install mongosh
Windows随 MSI 安装包自动安装,或下载:mongosh.msi
Linux“`bash
Dockerdocker run -it --rm mongosh
NPMnpm 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([...])聚合管道
clsclear()清屏
exitCtrl+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()
导出为 JSONmongosh --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 集成性能调优命令,欢迎继续提问!

文章已创建 2349

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部