MongoDB从零基础搭建到实战
MongoDB作为当下最流行的开源文档型NoSQL数据库,凭借灵活的文档结构、高扩展性和易用性,成为前后端开发、大数据存储、云原生项目的首选数据库之一。相比传统关系型数据库,它无需严格预定义表结构,适配多变的业务数据需求,尤其适合Node.js、Python、Java等主流开发场景。
本篇教程将从零开始,带你完成MongoDB的环境搭建、基础配置、核心命令操作、可视化工具使用、高级查询与实战,全程步骤详细、代码可直接复用,适合零基础新手入门,也适合有基础的开发者查漏补缺。
一、MongoDB核心概念先理清
学习MongoDB前,先搞懂核心术语,避免和关系型数据库混淆,上手更快。
1.1 MongoDB与关系型数据库核心对比
| MongoDB术语 | 关系型数据库(MySQL/Oracle)术语 | 说明 |
|---|---|---|
| 数据库(Database) | 数据库(Database) | 存储数据的容器,一个MongoDB可建多个库 |
| 集合(Collection) | 数据表(Table) | 无需预定义结构,存储同类文档,动态扩容 |
| 文档(Document) | 数据行(Row) | 最小数据单元,用BSON格式(类JSON,支持更多数据类型) |
| 字段(Field) | 数据列(Column) | 文档中的键值对,支持嵌套、数组结构 |
| _id | 主键(Primary Key) | MongoDB自动生成唯一主键,也可自定义 |
1.2 核心特性
-
文档型存储:数据以BSON格式存储,支持嵌套对象、数组,无需严格Schema
-
高可用:支持副本集,主节点故障自动切换,保证数据不丢失
-
高扩展性:支持分片集群,应对海量数据和高并发场景
-
丰富查询:支持条件查询、聚合、索引、排序、分页,媲美关系型数据库
-
跨平台:支持Windows、Mac、Linux全系统,兼容主流开发语言
二、MongoDB环境搭建(全系统教程)
MongoDB分为**社区版(Community)**和企业版,个人学习和中小型项目使用社区版完全足够,本篇以最新稳定版MongoDB 7.0为例讲解。
2.1 系统环境要求
-
Windows:Windows 10 及以上版本
-
Mac:macOS 10.15 及以上版本
-
Linux:Ubuntu 18.04+/CentOS 7+/Debian 10+
-
内存:建议至少2GB,开发环境1GB也可运行
2.2 Windows系统安装与配置
2.2.1 下载安装包
-
访问MongoDB官方下载地址:https://www.mongodb.com/try/download/community
-
选择Version:7.0(最新稳定版),Platform:Windows,Package:MSI
-
点击Download下载安装包,双击运行
2.2.2 安装步骤
-
同意协议,选择Complete(完整安装),新手推荐
-
服务配置页面,勾选"Install MongoD as a Service",设置服务自动启动
-
数据目录默认:
C:\Program Files\MongoDB\Server\7.0\data,日志目录默认:C:\Program Files\MongoDB\Server\7.0\log,无需修改 -
取消勾选"Install MongoDB Compass"(后续单独安装可视化工具),点击Install完成安装
2.2.3 配置环境变量(关键)
-
右键此电脑→属性→高级系统设置→环境变量
-
在系统变量中找到Path,点击编辑→新建
-
添加MongoDB的bin目录路径:
C:\Program Files\MongoDB\Server\7.0\bin -
一路确定保存,打开命令提示符(CMD),输入
mongod --version,显示版本号即配置成功
2.2.4 启动与关闭服务
-
启动服务:管理员CMD输入
net start MongoDB -
关闭服务:管理员CMD输入
net stop MongoDB -
连接数据库:CMD输入
mongosh,进入MongoDB命令行客户端
2.3 Mac系统安装与配置
2.3.1 Homebrew安装(推荐)
-
打开终端,安装MongoDB官方tap:
brew tap mongodb/brew -
安装社区版:
brew install mongodb-community@7.0
2.3.2 启动服务
-
开机自启:
brew services start mongodb-community@7.0 -
临时启动:
mongod --config /opt/homebrew/etc/mongod.conf -
连接数据库:终端输入
mongosh
2.4 Linux(Ubuntu)系统安装与配置
-
导入公钥:
wget -qO - https://www.mongodb.org/static/pgp/server-7.0.asc | sudo apt-key add - -
添加软件源:
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list -
更新源并安装:
sudo apt-get update && sudo apt-get install -y mongodb-org -
启动服务:
sudo systemctl start mongod -
设置开机自启:
sudo systemctl enable mongod -
连接数据库:
mongosh
2.5 验证安装成功
任意系统终端输入mongosh,出现以下提示即连接成功:
bash
Current Mongosh Log ID: xxxxxxxx
Connecting to: mongodb://127.0.0.1:27017/
Using MongoDB: 7.0.0
Using Mongosh: 2.0.0
test>
默认连接端口:27017,默认数据库:test
三、MongoDB基础核心操作(mongosh命令行)
进入mongosh客户端后,即可执行数据库、集合、文档的增删改查操作,所有命令区分大小写,以下为高频常用命令,建议收藏。
3.1 数据库操作
3.1.1 查看所有数据库
javascript
show dbs
# 或
show databases
注意:空数据库不会显示,插入数据后才会展示
3.1.2 创建/切换数据库
javascript
# 语法:use 数据库名
use mydb
# 切换到mydb库,不存在则自动创建
3.1.3 查看当前所在数据库
javascript
db
3.1.4 删除数据库
javascript
# 先切换到要删除的库
use mydb
# 执行删除
db.dropDatabase()
3.2 集合操作(相当于数据表)
3.2.1 创建集合
MongoDB无需手动创建集合,插入文档时自动创建;也可手动创建指定配置
javascript
# 手动创建集合
db.createCollection("user")
# 创建固定大小集合(可选)
db.createCollection("log", { capped: true, size: 1024*1024, max: 1000 })
3.2.2 查看所有集合
javascript
show collections
# 或
show tables
3.2.3 删除集合
javascript
# 语法:db.集合名.drop()
db.user.drop()
3.3 文档操作(核心增删改查)
文档是MongoDB的核心,以键值对形式存储,支持嵌套、数组,以下用user集合演示。
3.3.1 插入文档
插入单个文档
javascript
db.user.insertOne({
name: "张三",
age: 22,
gender: "男",
hobby: ["编程", "篮球"],
address: {
city: "北京",
district: "朝阳区"
},
createTime: new Date()
})
插入多个文档
javascript
db.user.insertMany([
{name: "李四", age: 25, gender: "女", hobby: ["读书", "旅游"]},
{name: "王五", age: 19, gender: "男", hobby: ["游戏", "摄影"]},
{name: "赵六", age: 28, gender: "女", hobby: ["健身", "美食"]}
])
3.3.2 查询文档
查询所有文档(格式化输出)
javascript
db.user.find().pretty()
条件查询
javascript
# 1. 精确查询:查找姓名为张三的用户
db.user.find({name: "张三"}).pretty()
# 2. 比较查询:年龄大于20的用户 ($gt大于, $lt小于, $gte大于等于, $lte小于等于, $ne不等于)
db.user.find({age: {$gt: 20}}).pretty()
# 3. 多条件且查询:年龄20-30之间的男性用户
db.user.find({age: {$gte: 20, $lte: 30}, gender: "男"}).pretty()
# 4. 或查询:男性或年龄大于25
db.user.find({$or: [{gender: "男"}, {age: {$gt: 25}}]}).pretty()
# 5. 模糊查询:姓名包含"三"
db.user.find({name: /三/}).pretty()
# 6. 字段过滤:只显示name和age,隐藏_id
db.user.find({}, {name: 1, age: 1, _id: 0}).pretty()
排序、分页、统计
javascript
# 排序:按年龄升序(1升序,-1降序)
db.user.find().sort({age: 1}).pretty()
# 分页:跳过2条,取2条(skip跳过条数,limit取条数)
db.user.find().skip(2).limit(2).pretty()
# 统计总数
db.user.countDocuments()
# 条件统计
db.user.countDocuments({gender: "男"})
3.3.3 更新文档
更新单个文档
javascript
# 将张三的年龄改为23
db.user.updateOne(
{name: "张三"}, # 查询条件
{$set: {age: 23}} # 更新内容
)
更新多个文档
javascript
# 所有女性用户添加status字段
db.user.updateMany(
{gender: "女"},
{$set: {status: "active"}}
)
替换整个文档
javascript
db.user.replaceOne(
{name: "王五"},
{name: "王五", age: 20, gender: "男", hobby: ["阅读"]}
)
3.3.4 删除文档
javascript
# 删除单个文档:删除赵六
db.user.deleteOne({name: "赵六"})
# 删除多个文档:删除年龄小于20的用户
db.user.deleteMany({age: {$lt: 20}})
# 清空集合所有文档(保留集合)
db.user.deleteMany({})
四、MongoDB可视化工具使用(MongoDB Compass)
命令行操作适合熟练开发者,新手推荐使用MongoDB Compass(官方免费可视化工具),图形化界面操作,无需记命令,直观管理数据库。
4.1 安装与连接
-
安装后打开,默认连接地址:
mongodb://localhost:27017 -
点击Connect,即可连接本地MongoDB服务
4.2 核心功能
-
可视化查看所有数据库、集合、文档
-
图形化新增、编辑、删除文档
-
可视化创建索引、执行查询语句
-
查看数据库性能、数据统计
-
导入导出数据,支持JSON、CSV格式
五、MongoDB高级操作
5.1 索引管理(提升查询效率)
索引是MongoDB性能优化的核心,避免全表扫描,常用索引操作:
javascript
# 创建单字段索引
db.user.createIndex({name: 1})
# 创建复合索引
db.user.createIndex({age: 1, name: -1})
# 查看所有索引
db.user.getIndexes()
# 删除索引
db.user.dropIndex("name_1")
5.2 聚合查询(Aggregation)
适合复杂数据统计、分组、计算,类似SQL的GROUP BY:
javascript
# 按性别分组,统计每组人数和平均年龄
db.user.aggregate([
{$group: {
_id: "$gender",
count: {$sum: 1},
avgAge: {$avg: "$age"}
}}
])
5.3 数据备份与恢复
5.3.1 备份数据(mongodump)
bash
# 备份所有数据库
mongodump
# 备份指定数据库
mongodump -d mydb -o ./backup
5.3.2 恢复数据(mongorestore)
bash
# 恢复所有数据库
mongorestore
# 恢复指定数据库
mongorestore -d mydb ./backup/mydb
六、常见问题与避坑指南
-
mongosh无法连接:检查MongoDB服务是否启动,端口27017是否被占用
-
插入数据后数据库不显示:空数据库不展示,插入集合数据后自动显示
-
查询速度慢:未创建索引,对高频查询字段建立索引
-
权限问题:生产环境务必设置账号密码,禁止外网直接访问27017端口
-
数据丢失:重要数据定期备份,生产环境建议搭建副本集保证高可用
七、总结
本篇教程完整覆盖了MongoDB从环境搭建、基础命令、可视化操作到高级实战的全流程,MongoDB的灵活文档结构和易用性,让它成为现代开发的必备数据库。零基础新手按照步骤一步步操作,即可快速上手;进阶开发者可重点掌握索引优化、聚合查询、副本集搭建等内容,适配生产环境需求。
后续可深入学习MongoDB集群部署、事务操作、与主流编程语言(Node.js/Python/Java)集成等内容,进一步提升开发和运维能力。