楠渡余生楠渡余生
首页
笔记
作品集
留言板
关于
GitHub
CSDN
首页
笔记
作品集
留言板
关于
GitHub
CSDN
  • 前端开发

    • React Server Components(RSC)学习笔记

      • React Server Components(RSC)学习笔记
    • 全栈框架学习笔记

      • 全栈框架学习笔记
    • jQuery 学习笔记

      • jQuery 学习笔记
    • React 学习笔记

      • React 学习笔记
    • AJAX 学习笔记

      • AJAX 学习笔记
    • Axios 完整学习笔记

      • Axios 完整学习笔记
    • CSS 属性速查手册

      • CSS 属性速查手册
    • HTML5 与 CSS 综合学习笔记

      • HTML5 与 CSS 综合学习笔记
    • JavaScript 学习笔记

      • JavaScript 学习笔记
    • Promise 学习笔记

      • Promise 学习笔记
    • Tailwind CSS 完整笔记

      • Tailwind CSS 完整笔记
    • TypeScript 快速上手

      • TypeScript 快速上手
    • Vue3 学习笔记

      • Vue3 学习笔记
  • 元框架与全栈路由

    • Next.js App Router 最佳实践

      • Next.js App Router 最佳实践
    • 跨域与服务端组件数据预取

      • 跨域与服务端组件数据预取
  • 现代数据流与安全

    • Prisma Schema 全栈类型生成

      • Prisma Schema 全栈类型生成
    • Supabase RLS 行级安全策略

      • Supabase RLS 行级安全策略
  • 商业化与支付闭环

    • SaaS 订阅制用户表结构设计

      • SaaS 订阅制用户表结构设计
    • Stripe Webhook 接入避坑指南

      • Stripe Webhook 接入避坑指南
  • 零运维与边缘计算

    • Cloudflare 基础防护与 CDN

      • Cloudflare 基础防护与 CDN
    • Vercel 自动化部署与环境变量

      • Vercel 自动化部署与环境变量
  • AI 赋能与集成

    • Vercel AI SDK 流式输出实战

      • Vercel AI SDK 流式输出实战
  • 增长、监控与运营

    • Resend 事务性邮件模板

      • Resend 事务性邮件模板
    • Sentry 前端异常捕获与报警

      • Sentry 前端异常捕获与报警
  • Node.js 深入学习

    • MongoDB 常用命令速查表

      • MongoDB 常用命令速查表
    • Node.js + MongoDB 生产级最佳实践指南

      • Node.js + MongoDB 生产级最佳实践指南
    • Node.js Express 框架

      • Node.js Express 框架
    • Node.js HTTP 模块

      • Node.js HTTP 模块
    • Node.js NPM 包管理

      • Node.js NPM 包管理
    • Node.js 文件系统模块

      • Node.js 文件系统模块
    • Node.js 模块化设计

      • Node.js 模块化设计
  • 后端开发

    • Express 基本使用

      • Express 基本使用
    • Node.js 学习笔记

      • Node.js 学习笔记
    • SpringBoot 完整学习笔记

      • SpringBoot 完整学习笔记
  • 开发工具

    • Windows + WSL + Docker 踩坑与通关指南

      • Windows + WSL + Docker 踩坑与通关指南
    • GitHub 新手完全指南

      • GitHub 新手完全指南
    • 个人博客搭建指南

      • 个人博客搭建指南

MongoDB 常用命令速查表

1. 终端与服务管理 (CLI)

服务控制

平台启动服务停止服务
Windowsnet start MongoDBnet stop MongoDB
Mac (Brew)brew services start mongodb-communitybrew services stop mongodb-community
Linuxsudo systemctl start mongodsudo systemctl stop mongod

常用工具命令

# 指定数据目录启动 (调试用)
mongod --dbpath "E:\data\db"

# 连接数据库 Shell
mongosh      # 新版 (推荐)
mongo        # 旧版

# 备份数据库
mongodump --db myapp --out ./backup

# 恢复数据库
mongorestore --db myapp ./backup/myapp

# Docker 快速启动
docker run -d --name mongodb -p 27017:27017 mongo
docker exec -it mongodb mongosh

2. Shell 交互命令 (mongosh)

数据库与集合

show dbs                  // 查看所有数据库
use my_database           // 切换/创建数据库
db                        // 查看当前数据库名
show collections          // 查看当前库所有集合
db.stats()                // 查看数据库状态
db.dropDatabase()         // ⚠️ 删除当前数据库
db.users.drop()           // ⚠️ 删除 users 集合

增 (Create)

// 插入单条
db.users.insertOne({ name: "Alice", age: 25 })

// 插入多条
db.users.insertMany([
  { name: "Bob", age: 22 },
  { name: "Charlie", age: 30 }
])

查 (Read)

// 基础查询
db.users.find()                     // 查所有
db.users.find().pretty()            // 格式化输出
db.users.findOne({ name: "Alice" }) // 查一条

// 条件与投影
db.users.find({ age: { $gt: 18 } }, { name: 1, email: 1, _id: 0 })

// 排序、分页
db.users.find()
  .sort({ age: -1 })  // -1 降序, 1 升序
  .skip(10)           // 跳过前10条
  .limit(5)           // 取5条

// 统计数量
db.users.countDocuments({ age: { $gte: 18 } })

改 (Update)

// 更新单条
db.users.updateOne(
  { name: "Alice" },
  { $set: { age: 26 } }
)

// 自增/自减
db.users.updateOne(
  { name: "Alice" },
  { $inc: { views: 1 } }
)

// 数组操作
db.users.updateOne(
  { name: "Alice" },
  { $push: { tags: "admin" } }
)

// Upsert
db.users.updateOne(
  { name: "David" },
  { $set: { age: 20 } },
  { upsert: true }
)

删 (Delete)

db.users.deleteOne({ name: "Alice" })
db.users.deleteMany({ status: "inactive" })

3. 查询操作符 (Operators)

类别符号含义示例
比较$eq / $ne等于 / 不等于{ age: { $ne: 18 } }
$gt / $gte大于 / 大于等于{ age: { $gte: 18 } }
$lt / $lte小于 / 小于等于{ price: { $lt: 100 } }
$in / $nin在数组中 / 不在{ role: { $in: ["admin", "mod"] } }
逻辑$or或{ $or: [{ age: 18 }, { vip: true }] }
$and与(通常省略)
$not非{ age: { $not: { $lt: 18 } } }
元素$exists字段是否存在{ email: { $exists: true } }
$type字段类型{ age: { $type: "number" } }
数组$all包含所有{ tags: { $all: ["js", "node"] } }
$elemMatch匹配数组内对象{ comments: { $elemMatch: { user: "A" } } }

4. Mongoose 常用方法 (Node.js)

const User = require('./models/User');

// 链式查询
const users = await User.find({ isActive: true })
  .select('name email -_id')
  .sort('-createdAt')
  .limit(10)
  .populate('profile')
  .lean();

// 创建
const user = await User.create({ name: 'Alice' });

// 查找并更新
const updated = await User.findByIdAndUpdate(
  id,
  { $set: req.body },
  { new: true, runValidators: true }
);

// 聚合
const stats = await User.aggregate([
  { $match: { age: { $gte: 18 } } },
  { $group: { _id: "$role", count: { $sum: 1 } } }
]);

5. 索引与性能 (Index)

// 查看索引
db.users.getIndexes()

// 创建索引
db.users.createIndex({ username: 1 })
db.users.createIndex({ email: 1 }, { unique: true })

// 复合索引
db.users.createIndex({ role: 1, createdAt: -1 })

// 查询分析
db.users.find({ username: "Alice" }).explain("executionStats")

// 删除索引
db.users.dropIndex("email_1")

快速参考

常用命令清单:

  • mongosh - 连接数据库
  • show dbs - 查看所有数据库
  • use dbname - 切换数据库
  • show collections - 查看集合
  • db.collection.find() - 查询数据
  • db.collection.insertOne() - 插入数据
  • db.collection.updateOne() - 更新数据
  • db.collection.deleteOne() - 删除数据

性能优化建议:

  • 为常用查询字段创建索引
  • 使用投影减少返回字段
  • 在 Mongoose 中使用 .lean() 提升查询性能
  • 合理使用分页避免一次性加载大量数据

新手易踩坑:

  • 按 _id 查询查不到? Node 里 _id 是 ObjectId 类型,字符串和它不相等。要用 new ObjectId(id) 转换(Mongoose 的 findById 会自动转):
    const { ObjectId } = require('mongodb');
    db.users.findOne({ _id: new ObjectId('507f1f77bcf86cd799439011') });
    
  • update 忘记加 $set:updateOne(filter, { age: 26 }) 会把整个文档替换成 { age: 26 },正确写法是 { $set: { age: 26 } }。
  • 大数据量分页用 skip 很慢:skip 需要扫描并跳过前面的文档,深分页时改用「记录上一页最后一个 _id,下一页查 _id > 上次 」的游标分页。

💡 提示:本速查表涵盖了MongoDB最常用的命令和操作。建议收藏此页面,在日常开发中随时查阅。


欢迎在评论区分享你的MongoDB使用经验或提问!

最后更新: 2026/6/13 22:15
贡献者: 52nnnn, Claude