MongoDB是一种流行的非关系型数据库(NoSQL数据库),它以文档形式存储数据,结构灵活,易于扩展,非常适合快速开发和处理大量非结构化或半结构化数据。对于零基础的同学来说,MongoDB的学习曲线相对平缓,今天我们就从最基础的概念和操作开始,一步步走进MongoDB的世界。
一、MongoDB是什么?¶
简单来说,MongoDB是一个基于分布式文件存储的数据库。它不像MySQL那样用“表”来存储数据,而是用“文档”(类似JSON格式的键值对)来存储数据,并且将多个文档组织成一个“集合”(类似MySQL的“表”),多个集合又属于一个“数据库”。
举个例子:如果把MySQL比作“表格工厂”(每行是记录,每列是字段),MongoDB就像“积木仓库”——你可以自由组合不同的“积木”(字段),灵活搭建出需要的数据结构。
二、安装MongoDB¶
1. 本地安装(推荐)¶
-
Windows系统:
从MongoDB官网下载安装包(https://www.mongodb.com/try/download/community),选择对应版本(推荐64位),按提示安装,安装过程中记得勾选“Add to PATH”(方便命令行调用)。安装完成后,打开命令提示符(CMD),输入mongod --version验证是否安装成功。 -
Linux系统:
以Ubuntu为例,打开终端执行:
sudo apt update && sudo apt install -y mongodb
启动服务:sudo systemctl start mongod,设置开机自启:sudo systemctl enable mongod。
- Mac系统:
推荐用Homebrew安装:brew tap mongodb/brew && brew install mongodb-community,启动服务:brew services list | grep mongodb-community查看状态,没启动的话用brew services start mongodb-community。
2. 验证安装¶
安装完成后,打开新的终端/命令行窗口,输入 mongo 即可连接到本地MongoDB服务(默认端口27017),如果显示类似 > 提示符,说明连接成功!
三、MongoDB命令行基础操作¶
MongoDB的核心交互方式是命令行工具(mongo shell),我们先从最基础的数据库、集合、文档操作开始。
1. 数据库操作¶
-
切换/创建数据库:
MongoDB中没有“创建数据库”的显式命令,直接用use 数据库名即可(如果数据库不存在,会自动创建,后续操作会关联到该数据库)。
例如:use mydb(切换到名为“mydb”的数据库,不存在则创建)。 -
查看所有数据库:
输入show dbs(注意:空数据库不会显示,只有包含数据的数据库才会列出)。 -
查看当前数据库:
输入db,会显示当前选中的数据库名称(比如刚创建的“mydb”)。 -
删除数据库:
先切换到目标数据库(use mydb),然后执行db.dropDatabase(),会返回{ "dropped" : "mydb", "ok" : 1 },表示删除成功。
2. 集合操作(Collection)¶
集合相当于关系型数据库中的“表”,是一组文档的集合。MongoDB中集合无需显式创建,插入文档时会自动创建(但也可以用 createCollection 显式创建)。
-
查看集合:
切换到目标数据库后,输入show collections或show tables(效果相同),会列出该数据库下的所有集合。 -
删除集合:
先切换到目标数据库,执行db.集合名.drop(),例如db.students.drop(),返回true表示删除成功。
3. 文档操作(Document)¶
文档是MongoDB的最小数据单元,格式为JSON(类似键值对),支持嵌套结构,非常灵活。我们重点掌握增(Create)、查(Read)、改(Update)、删(Delete) 操作,简称CRUD。
(1)插入文档(Create)¶
用 insertOne(单条)或 insertMany(多条)插入文档。
示例:创建一个“学生”集合,插入1条学生数据:
// 插入单条文档
db.students.insertOne({
name: "小明",
age: 18,
hobbies: ["篮球", "编程"], // 数组类型
address: { city: "北京", district: "海淀区" } // 嵌套文档
})
返回结果类似:
{
"acknowledged" : true,
"insertedId" : ObjectId("60d21b4660d21b4660d21b46"), // 自动生成的唯一ID
"ok" : 1
}
插入多条文档:
db.students.insertMany([
{ name: "小红", age: 19, hobbies: ["画画", "音乐"] },
{ name: "小刚", age: 20, hobbies: ["跑步", "游戏"] }
])
(2)查询文档(Read)¶
用 find() 方法查询,默认返回集合中所有文档(类似MySQL的 SELECT * FROM)。
- 查询所有文档:
db.students.find() // 返回一个游标,需遍历查看
若结果较多,光标默认显示前20条,可通过 it 遍历查看剩余结果,或用 toArray() 转为数组:
db.students.find().toArray() // 返回所有学生数据数组
- 按条件查询:
用find({条件}),例如查询年龄等于18的学生:
db.students.find({ age: 18 })
常用条件操作符:$gt(大于)、$lt(小于)、$eq(等于,可省略)、$in(包含)等。
示例:查询年龄大于18且小于20的学生:
db.students.find({ age: { $gt: 18, $lt: 20 } })
(3)更新文档(Update)¶
用 updateOne(更新1条)或 updateMany(更新多条),需指定过滤条件和更新内容。
- 基础更新(替换文档):
用$set或直接赋值(替换整个文档)。
示例:将name为“小明”的学生年龄改为20:
db.students.updateOne(
{ name: "小明" }, // 过滤条件:name是“小明”
{ $set: { age: 20 } } // 更新内容:仅修改age字段
)
返回结果:
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
- 增量更新:
如果需要对数值字段做自增(如age+1),用$inc操作符:
db.students.updateOne({ name: "小红" }, { $inc: { age: 1 } }) // age+1
(4)删除文档(Delete)¶
用 deleteOne(删除1条)或 deleteMany(删除多条)。
- 删除1条:
db.students.deleteOne({ name: "小刚" }) // 删除name为“小刚”的第一条
- 删除多条:
db.students.deleteMany({ age: { $lt: 19 } }) // 删除所有年龄小于19的学生
四、图形化工具:MongoDB Compass¶
命令行操作适合编程,但日常管理数据时,图形化工具更直观。推荐使用MongoDB官方工具 MongoDB Compass,安装后直接连接本地数据库即可。
1. 安装与连接¶
- 官网下载安装包:https://www.mongodb.com/products/compass
- 安装完成后打开,点击“Connect”,默认连接本地MongoDB(地址:
mongodb://localhost:27017),点击“Connect”即可。
2. 工具功能¶
- 查看数据库/集合:左侧导航栏显示所有数据库和集合,点击集合可查看所有文档。
- 增删改查:选中集合后,右侧可直接输入JSON格式文档(插入),或点击“Edit”修改、“Delete”删除文档。
- 搜索与筛选:顶部有搜索框,可按条件过滤文档(类似命令行的
find())。
五、总结与学习建议¶
MongoDB的核心优势是灵活的文档结构和无固定表结构,适合快速迭代的项目。对于零基础同学,建议:
- 多动手练习:从命令行插入、查询简单文档开始,熟悉CRUD操作。
- 对比关系型数据库:理解“集合→表”“文档→行”的对应关系,降低认知成本。
- 重点关注文档嵌套:MongoDB支持多层嵌套文档,这是处理复杂数据的关键(比如存储用户信息+地址+订单)。
如果需要深入学习,可进一步了解索引(createIndex)、聚合管道(aggregate)、副本集等进阶内容,但打好基础后再深入会更轻松!MongoDB入门不难,关键是多敲命令、多尝试,祝你学习愉快~