MongoDB教程 - 灵活高效的文档型数据库
MongoDB是一款开源的文档型NoSQL数据库,使用BSON格式存储数据,支持灵活的文档结构。它兼具关系型数据库的查询能力和NoSQL的扩展性,适合处理结构不固定或快速变化的数据。本教程将助你全面掌握MongoDB。
一、MongoDB简介
MongoDB由10gen公司(现MongoDB Inc)于2009年发布。它将数据存储为JSON风格的文档,无需预定义表结构,字段可以动态添加。MongoDB支持丰富的查询语言、索引和聚合管道,功能强大且易于扩展。
| 特性 | 描述 |
|---|---|
| 文档存储 | JSON/BSON格式,结构灵活 |
| 无模式 | 同一集合中文档结构可不同 |
| 水平扩展 | 原生支持分片,易于分布式部署 |
| 丰富查询 | 支持条件查询、聚合、全文索引 |
二、你将学到什么
- 基础概念:数据库、集合、文档、字段、_id
- CRUD操作:insert、find、update、delete命令
- 查询进阶:条件操作符、正则、数组查询、分页排序
- 索引:单字段索引、复合索引、文本索引、地理索引
- 聚合管道:$match、$group、$project、$sort、$lookup
- 架构设计:嵌入 vs 引用、分片、副本集
三、代码示例
MongoDB文档操作与聚合查询示例:
// 插入文档
db.users.insertOne({
name: "小明",
age: 25,
email: "xiaoming@example.com",
hobbies: ["编程", "阅读", "游戏"],
address: { city: "北京", district: "海淀区" }
});
// 批量插入
db.users.insertMany([
{ name: "小红", age: 23, tags: ["前端"] },
{ name: "小刚", age: 28, tags: ["后端", "运维"] }
]);
// 条件查询:年龄大于24且爱好包含编程
db.users.find({
age: { $gt: 24 },
hobbies: "编程"
}).sort({ age: -1 }).limit(10);
// 更新文档
db.users.updateOne(
{ name: "小明" },
{ $set: { age: 26 }, $push: { hobbies: "音乐" } }
);
// 聚合管道:统计每个城市用户数和平均年龄
db.users.aggregate([
{ $match: { age: { $gte: 18 } } },
{ $group: {
_id: "$address.city",
userCount: { $sum: 1 },
avgAge: { $avg: "$age" }
}},
{ $sort: { userCount: -1 } }
]);
四、适合人群
- 后端开发者,想要学习NoSQL数据库
- 数据工程师,处理非结构化或半结构化数据
- 全栈开发者,需要灵活的数据存储方案
- 从关系型数据库转向NoSQL的开发者
五、学习建议
MongoDB的查询语法和SQL差异较大,建议多动手实践。重点理解文档模型设计原则——何时嵌入、何时引用。聚合管道是MongoDB的强大功能,务必熟练掌握。学习时要建立正确的NoSQL思维,不要完全照搬关系型数据库的设计模式。
🎯 开始你的MongoDB学习之旅吧!
课程信息:
共 4 个章节
暂无内容