MongoDB 基础与实践

Windows 11 环境下的数据库快速上手指南

授课时长:60分钟 | 实践时长:30分钟

课程大纲

核心模块

  • 第一部分: 环境搭建与启动测试 (Windows 11)
  • 第二部分: 核心概念与数据库/集合操作
  • 第三部分: 文档的基本操作 (CRUD)
  • 第四部分: 聚合管道操作初探
  • 第五部分: 索引的创建与管理
学习路线图

什么是 MongoDB?

NoSQL 的代表作

MongoDB 是一个基于分布式文件存储的开源数据库系统。它属于 NoSQL 数据库,不使用传统的表格关系,而是使用类似 JSON 的 BSON 格式来存储数据。


  • 灵活的模式: 数据结构随时可变
  • 高可扩展性: 天生支持分布式架构
  • 高性能: 内存映射机制,查询速度快

SQL vs MongoDB

  • Database → Database (数据库)
  • Table → Collection (集合)
  • Row → Document (文档)
  • Column → Field (字段)

1. Windows 11 环境搭建

1

下载安装包

访问官网下载 MSI 格式安装包

2

执行安装

按向导配置,选择作为服务运行

3

配置环境变量

将 bin 目录加入系统 Path

4

安装 MongoSH

配置专用的命令行交互工具

1.1 下载与安装 MongoDB

关键安装步骤

  • 进入官网,选择 MongoDB Community Server
  • 平台选择 Windows,格式选择 MSI
  • 安装类型选择 Complete(完整版)
  • 核心注意: 勾选 "Install MongoD as a Service",让其在后台作为 Windows 服务自动运行。
  • 取消勾选 "Install MongoDB Compass"(我们可以稍后单独装,避免安装过慢)。
安装向导截图占位

1.2 配置环境与 MongoSH

环境变量配置

为了能在任意终端运行命令,需将 MongoDB 的 bin 目录(例如 C:\Program Files\MongoDB\Server\7.0\bin)添加到 Windows 11 的系统 Path 环境变量中。


安装 MongoSH

从 MongoDB 6.0 开始,官方不再内置 mongo 命令,需单独下载 MongoDB Shell (mongosh) 并同样配置其环境变量。

系统环境变量设置截图

1.3 启动与连接测试

服务状态验证

因为我们配置了 Windows 服务,MongoDB 会自动运行。打开命令提示符 (CMD),输入以下命令连接数据库:

> mongosh

如果出现 test> 提示符,说明连接成功!

输入 quit()exit 可以退出终端。

MongoSH 连接成功截图

第二部分:核心操作

了解并掌握 数据库 (Database)集合 (Collection) 的生命周期。
这是进行一切数据存储的前置条件。

2.1 数据库操作 (一)

查看与切换数据库

  • 查看所有数据库:
    show dbs
  • 切换/创建数据库:
    use shopDB
    *注意:若 shopDB 不存在,MongoDB 会在内存中创建它。但直到插入第一条数据前,show dbs 不会显示它。
  • 查看当前数据库:
    db

2.2 数据库操作 (二)

删除数据库

要删除一个数据库,你必须先切换到该数据库,然后执行删除命令。这是一个不可逆的危险操作!

> use shopDB
> db.dropDatabase()

执行成功后,系统会返回 { "dropped" : "shopDB", "ok" : 1 }

2.3 集合操作 (一)

显式创建与查看集合

  • 创建集合:
    db.createCollection("users")
    *通常不需要手动创建,插入数据时会自动生成。
  • 查看当前库所有集合:
    show collections
    或使用 `show tables` 效果相同。

2.4 集合操作 (二)

删除指定集合

当你不再需要某个集合(表)的数据和结构时,可以将其整个删除。

> db.users.drop()

命令语法结构:db.集合名称.drop()

返回 true 表示删除成功,返回 false 表示集合原本就不存在。

第三部分:文档操作 (CRUD)

Create (增), Read (查), Update (改), Delete (删)
这是日常开发中使用最频繁的数据库操作。

3.1 增加文档 (Create)

插入一条与多条数据

  • 插入一条 (insertOne):
    db.users.insertOne({ name: "Tom", age: 25 })
  • 插入多条 (insertMany):
    db.users.insertMany([
      { name: "Jerry", age: 22 },
      { name: "Spike", age: 30 }
    ])

*MongoDB 会自动为每个文档生成唯一的 _id 字段。

3.2 查询文档 (Read)

基本查询

  • 查询所有: db.users.find()
  • 按条件查询:
    db.users.find({ name: "Tom" })
  • 使用操作符 (例如大于):
    db.users.find({ age: { $gt: 23 } })
    $gt (大于), $lt (小于), $gte (大于等于), $lte (小于等于)

3.3 更新文档 (Update)

修改现有数据

更新操作需要两个核心参数:查询条件更新内容

  • 更新单条 (updateOne): 找到第一条名字为Tom的记录,将其年龄改为26。
    db.users.updateOne(
      { name: "Tom" },
      { $set: { age: 26 } }
    )
    *必须使用 $set 操作符,否则会替换整个文档。

3.4 删除文档 (Delete)

移除指定数据

根据条件精确删除文档。请谨慎操作!

  • 删除单条 (deleteOne): 删除第一个匹配的数据。
    db.users.deleteOne({ name: "Tom" })
  • 删除多条 (deleteMany): 删除所有匹配的数据。
    db.users.deleteMany({ age: { $lt: 20 } }) // 删除所有20岁以下的记录

第四部分:聚合管道 (Aggregation)

处理数据并返回计算结果,类似于 SQL 中的 GROUP BY。
数据分析的利器,像流水线一样加工数据。

4.1 认识聚合管道

流水线处理模式

文档进入聚合管道后,会经过一个或多个阶段(Stage),每个阶段对数据进行处理并传递给下一个阶段。


常用聚合阶段

  • $match: 过滤数据(类似 find)
  • $group: 将数据分组,可进行统计
  • $sort: 对结果进行排序
  • $project: 限制输出的字段

4.2 聚合操作实战

示例:按部门统计人数

语法:db.collection.aggregate([ 阶段1, 阶段2... ])

db.employees.aggregate([
  {
    $group: {
      _id: "$department", // 按照部门字段分组
      totalCount: { $sum: 1 } // 每遇到一条记录加1
    }
  }
])

*这里 _id 在聚合中表示分组的依据,$department 提取原文档中的部门名称。

第五部分:索引操作 (Index)

书籍的目录,提升查询速度的绝招。
没有索引的查询是全表扫描,效率极低。

5.1 创建与查看索引

提升查询性能

  • 创建单字段索引:age 字段创建升序索引。
    db.users.createIndex({ age: 1 })
    1 表示升序,-1 表示降序。
  • 查看集合中的所有索引:
    db.users.getIndexes()
    _id 字段会默认自带一个索引。

5.2 删除索引

清理不必要的索引

索引虽然加快了查询速度,但会降低插入和更新的速度,并占用磁盘空间,因此不需要的索引应当删除。

  • 删除指定索引:
    db.users.dropIndex({ age: 1 })
  • 删除全部附加索引:
    db.users.dropIndexes()
    *这不会删除默认的 _id 索引。

Ready? 开启实践环节

请登录实践平台,按要求完成操作题

遇到问题请随时举手提问