MongoDB 入门到精通:10+核心命令/环境搭建/增删改查全解

MongoDB 入门到精通是当今最流行的非关系型数据库(NoSQL),以文档存储、灵活结构、高并发、易扩展的特点,成为前端全栈、大数据、Node.js项目的首选数据库。本文系统讲解MongoDB环境搭建、核心概念、10+核心命令、增删改查、高级特性、实战优化,搭配可直接运行的完整代码+新手友好注释,零基础也能快速掌握MongoDB开发技能!

MongoDB 入门到精通 核心知识体系 环境搭建/命令/增删改查

图1:MongoDB 入门到精通 核心知识体系

一、MongoDB 入门到精通:基础概念与环境搭建

学习MongoDB,首先要搞懂核心概念:MongoDB是一款开源文档型数据库,基于BSON(二进制JSON)存储数据,无需固定表结构,支持动态字段,特别适合前端、Node.js、大数据、高并发项目。和传统关系型数据库MySQL相比,MongoDB的学习门槛更低,灵活性和扩展性优势明显,下面用一张表帮你秒懂核心区别:

核心概念(对比MySQL,秒懂)

特性 MongoDB MySQL
数据模型 文档型(BSON/JSON),无固定结构 表结构(行/列),固定Schema
适用场景 高并发、动态数据、大数据、全栈项目 结构化数据、事务要求高、传统业务系统
扩展性 天然支持分片集群,横向扩展轻松 主从复制为主,横向扩展复杂
语法风格 类JSON语法,开发效率高 SQL语法,学习成本稍高

3种环境搭建方式(新手首选)

# 1. Docker一键安装(企业/开发首选,环境隔离,无环境污染)
# --name: 容器名,-p: 端口映射,-e: 初始化root密码,-v: 数据持久化
docker run -d \
  --name mongodb \
  -p 27017:27017 \
  -e MONGO_INITDB_ROOT_USERNAME=admin \
  -e MONGO_INITDB_ROOT_PASSWORD=123456 \
  -v /data/mongodb:/data/db \
  mongo:7.0

# 2. Windows/Linux 本地安装(新手本地开发首选)
# 官网下载:https://www.mongodb.com/try/download/community
# 安装后默认端口:27017,数据目录:/data/db(Windows为C:\Program Files\MongoDB\Server\7.0\data)
# 安装后配置环境变量,即可在命令行使用mongosh

# 3. 云数据库MongoDB Atlas(线上项目首选,无需运维)
# 官网注册:https://www.mongodb.com/atlas/database,免费版即可满足开发需求
# 连接命令(Atlas集群连接)
mongosh "mongodb+srv://集群地址.mongodb.net/" --username admin

# 4. 连接MongoDB命令(mongosh,新版官方客户端,必学)
mongosh # 本地无密码连接
mongosh -u admin -p 123456 --host 127.0.0.1 --port 27017 # 带账号密码远程连接

基础命令速查(新手第一个命令,必背)

# 查看当前所在数据库
db

# 查看所有数据库(空数据库不显示,需插入数据后才会显示)
show dbs

# 切换/创建数据库(不存在则自动创建,仅在插入数据后持久化,核心命令)
use student_db

# 查看当前数据库下的所有集合
show collections

# 查看MongoDB版本
db.version()

# 查看当前登录用户
db.runCommand({connectionStatus:1})

二、MongoDB 入门到精通:数据库与集合操作

MongoDB最大的优势就是无需提前建库建表,插入数据时自动创建集合和数据库,极大简化新手操作,以下是完整管理命令,带详细注释:

# ------------------- 数据库操作 -------------------
# 1. 创建/切换数据库(核心:use命令=创建+切换,仅插入数据后才会持久化)
use student_db

# 2. 删除当前数据库(谨慎操作!不可逆)
db.dropDatabase()

# ------------------- 集合操作 -------------------
# 1. 创建集合(手动创建,可选,插入数据时自动创建,可配置集合属性)
db.createCollection("student", {
  capped: false, # 是否为固定大小集合
  size: 1024000, # 集合大小(单位KB,capped为true时生效)
  max: 1000 # 集合最大文档数(capped为true时生效)
})

# 2. 查看集合详细信息
db.student.stats()

# 3. 重命名集合
db.student.renameCollection("student_new")

# 4. 删除集合(谨慎操作!不可逆)
db.student.drop()

三、MongoDB 入门到精通:CRUD增删改查(核心命令)

CRUD是MongoDB的核心操作,所有命令基于JSON格式,语法简单易上手,新手直接复制运行,带超详细注释,覆盖企业全场景!

1. C – Create 新增数据

# 切换到学生数据库
use student_db

# 1. 插入单条文档(insertOne:MongoDB 3.2+推荐,返回插入结果)
db.student.insertOne({
  name: "张三",
  age: 18,
  gender: "男",
  score: 95,
  createTime: new Date(),
  tags: ["前端", "Vue"] # 支持数组类型,无需提前定义
})

# 2. 批量插入多条文档(insertMany:企业批量导入数据首选)
db.student.insertMany([
  { name: "李四", age: 19, gender: "女", score: 88, createTime: new Date() },
  { name: "王五", age: 20, gender: "男", score: 92, createTime: new Date() },
  { name: "赵六", age: 18, gender: "女", score: 90, createTime: new Date() }
])

# 3. 插入数据自动生成唯一主键:_id(ObjectId类型,核心特性)

2. R – Read 查询数据(最常用)

# ------------------- 基础查询 -------------------
# 1. 查询集合中所有文档
db.student.find()

# 2. 格式化输出(pretty():易读性更强,新手必加)
db.student.find().pretty()

# 3. 条件查询:查询年龄=18的学生
db.student.find({ age: 18 })

# 4. 投影查询:只返回指定字段(1=显示,0=不显示,_id默认显示)
db.student.find({ age: 18 }, { name: 1, score: 1, _id: 0 })

# ------------------- 高级条件查询 -------------------
# 比较运算符:$gt(大于) | $gte(大于等于) | $lt(小于) | $lte(小于等于) | $ne(不等于)
# 查询年龄大于18的学生
db.student.find({ age: { $gt: 18 } })

# 逻辑运算符:$and(并且,默认) | $or(或者) | $not(取反)
# 多条件并查询(默认AND):年龄18 且 性别男
db.student.find({ age: 18, gender: "男" })
# 多条件或查询($or):年龄18 或 分数90+
db.student.find({ $or: [{ age: 18 }, { score: { $gte: 90 } }] })

# 模糊查询:正则表达式(类似MySQL LIKE,常用)
db.student.find({ name: /张/ }) # 包含"张"的姓名
db.student.find({ name: /^张/ }) # 以"张"开头的姓名(性能更高,推荐)

# 查询数据总条数(countDocuments:MongoDB 4.0+推荐,必学)
db.student.countDocuments()

3. U – Update 修改数据(核心:必须加$set)

# ------------------- 修改数据(必避坑) -------------------
# 1. 修改单条文档(updateOne:仅修改第一条匹配数据,企业常用)
# 核心:必须用$set修改指定字段,否则会直接覆盖整个文档,MongoDB第一大坑!
db.student.updateOne(
  { name: "张三" }, # 查询条件
  { $set: { age: 20, score: 98 } } # 修改内容($set必须加!)
)

# 2. 批量修改(updateMany:修改所有匹配数据)
# $inc:数字自增/自减,给所有女生分数+5
db.student.updateMany(
  { gender: "女" },
  { $inc: { score: 5 } }
)

# 3. 替换整个文档(replaceOne:谨慎使用)
db.student.replaceOne(
  { name: "赵六" },
  { name: "赵六", age: 19, score: 95, gender: "女" }
)

4. D – Delete 删除数据(必谨慎)

# ------------------- 删除数据(不可逆操作) -------------------
# 1. 删除单条文档(deleteOne:仅删除第一条匹配数据)
db.student.deleteOne({ name: "张三" })

# 2. 批量删除(deleteMany:删除所有匹配数据)
# 删除分数小于80的学生
db.student.deleteMany({ score: { $lt: 80 } })

# 3. 清空集合所有数据(谨慎!不可逆)
db.student.deleteMany({})

四、MongoDB 入门到精通:高级特性(企业必备)

掌握排序、分页、聚合、索引、备份恢复,才能胜任企业级MongoDB开发,以下是全场景高级命令,小白直接用!

1. 排序与分页(列表页必备)

# 1. 排序:1=升序,-1=降序 | 按分数降序排序
db.student.find().sort({ score: -1 }).pretty()

# 2. 分页:limit=显示条数,skip=跳过条数(分页公式:skip = (页码-1)*每页条数)
# 第1页:每页2条
db.student.find().limit(2).skip(0)
# 第2页:每页2条
db.student.find().limit(2).skip(2)

# 3. 组合使用:排序+分页(企业标准写法)
db.student.find().sort({ score: -1, _id: 1 }).limit(2).skip(0).pretty()

2. 聚合查询(统计数据核心)

# 按性别统计人数、平均分、总分、最高分(常用统计)
db.student.aggregate([
  # 分组条件:_id为分组字段,$gender表示取gender字段的值
  { $group: {
    _id: "$gender",
    count: { $sum: 1 }, # 统计人数
    avgScore: { $avg: "$score" }, # 平均分
    totalScore: { $sum: "$score" }, # 总分
    maxScore: { $max: "$score" } # 最高分
  }},
  # 排序:按平均分降序
  { $sort: { avgScore: -1 } }
])

3. 索引(性能优化核心)

# ------------------- 索引操作(必学) -------------------
# 1. 创建单字段索引(姓名索引,提升姓名查询速度,1=升序,-1=降序)
db.student.createIndex({ name: 1 })

# 2. 创建复合索引(多字段索引,遵循最左前缀原则,进阶)
db.student.createIndex({ age: 1, score: -1 })

# 3. 查看集合所有索引
db.student.getIndexes()

# 4. 删除索引(通过索引名删除,索引名=字段名_1)
db.student.dropIndex("name_1")

五、MongoDB 入门到精通:完整实战案例(学生成绩管理)

从零搭建学生管理系统,所有命令可直接运行,零基础跑通完整项目,巩固MongoDB核心知识点!

# 1. 创建数据库
use student_manage

# 2. 插入测试数据
db.student.insertMany([
  { name: "张三", age: 18, gender: "男", score: 95, subject: "数学" },
  { name: "李四", age: 19, gender: "女", score: 88, subject: "语文" },
  { name: "王五", age: 20, gender: "男", score: 92, subject: "英语" },
  { name: "赵六", age: 18, gender: "女", score: 90, subject: "数学" }
])

# 3. 创建索引优化查询
db.student.createIndex({ name: 1 })
db.student.createIndex({ subject: 1 })

# 4. 实战查询:查询数学科目90分以上学生
db.student.find({ subject: "数学", score: { $gte: 90 } }).pretty()

# 5. 实战统计:按科目统计平均分
db.student.aggregate([
  { $group: { _id: "$subject", avgScore: { $avg: "$score" } } }
])

# 6. 实战分页:第1页,每页2条,按分数排序
db.student.find().sort({ score: -1 }).limit(2).skip(0).pretty()

MongoDB 入门到精通 实战命令与优化

图2:MongoDB 入门到精通 实战命令演示

六、MongoDB 入门到精通:新手避坑指南(100%踩坑点全覆盖)

避坑1:修改数据忘记加 $set

update必须用$set修改指定字段,否则会直接覆盖整个文档,丢失所有原有数据!

避坑2:空数据库不显示

use创建数据库后,必须插入数据,show dbs才会显示,空数据库不会持久化!

避坑3:索引滥用

索引提升查询速度,但会降低插入/修改速度,不要给所有字段加索引!

七、MongoDB 入门到精通:学习路线与总结

通过本文的系统学习,你已经掌握了MongoDB的核心技能,从环境搭建、基础命令、增删改查到高级特性、实战优化,零基础也能轻松上手,胜任企业级MongoDB开发!

  1. 入门阶段:环境搭建 → 基础命令 → CRUD增删改查 → 条件查询
  2. 进阶阶段:排序分页 → 聚合查询 → 索引优化 → 事务
  3. 企业阶段:副本集 → 分片集群 → 数据备份恢复 → 性能调优
    • 适用场景:前端全栈、Node.js项目、大数据、高并发、动态数据
    • 核心优势:无固定结构、语法简单、兼容JSON、易扩展

延伸学习推荐

MongoDB搭配Node.js/Vue3开发全栈项目:
数据库全栈学习
MongoDB官方文档

本文为「小白编程笔记」原创 · MongoDB 入门到精通全解

2人评论了“MongoDB 入门到精通:10+核心命令/环境搭建/增删改查全解”

  1. Pingback: 数据库全栈学习:4篇经典技术专栏全目录 - 小白 编程 笔记

  2. Pingback: 小众数据库全解:15+款不常用数据库分类与选型指南 - 小白 编程 笔记

发表评论

滚动至顶部
渝公网安备50022402001073号  |  渝ICP备2026004448号   © 2026 小白编程笔记