1/MongoDB 是什么?
MongoDB 是一个开源的 NoSQL 数据库,属于 文档型数据库 的类别。
它的核心特点是:
- 使用类似 JSON 的 BSON 格式 存储数据
- 无固定表结构(模式灵活)
- 支持 水平扩展(分布式架构)
(1)MongoDB的存储结构是什么?
MongoDB 的存储结构, 区别于传统的关系型数据库(比如mysql),主要由如下三个单元组成:
-
数据库(Database)
mongodb中的数据库和mysql中的数据库是相似的概念.
可以在 MongoDB 中创建多个数据库,每个数据库中有多个集合. -
集合(Collection)
类似于关系型数据库中的表(Table).一个数据库中可以有多个集合.
(类似于一个数据库中可以有多张表.) -
文档(Document)
MongoDB 中最基本的单元, 由键值对(key-value)组成,类似于数据表中的行(Row)。
也就是说,MongoDB 将数据记录存储为文档,这些文档聚集一起就是一个集合(及:一张表table)
SQL 与 MongoDB 常见术语对比 :
| SQL | MongoDB |
|---|---|
| 表(Table) | 集合(Collection) |
| 行(Row) | 文档(Document) |
| 列(Col) | 字段(Field) |
| 主键(Primary Key) | 对象 ID(Objectid) |
| 索引(Index) | 索引(Index) |
| 嵌套表(Embeded Table) | 嵌入式文档(Embeded Document) |
| 数组(Array) | 数组(Array) |
对象ID,其实就是文档的id, 就相当于每个文档的身份证,具有唯一性。(类似mysql中数据表中的主键,唯一标识表中的每一行数据.)
(2)市场定位
MongoDB 主要定位于:
- 灵活的数据模型场景 - 数据结构经常变化的应用
- 大数据量和高并发 - 适合互联网级应用
- 敏捷开发 - 快速迭代,无需预先严格定义表结构
- 替代或补充关系型数据库 - 在特定场景下提供更好的性能/灵活性
2/如何使用
基本操作示例:
// 插入文档
db.users.insertOne({
name: "张三",
age: 25,
hobbies: ["编程", "阅读"],
address: {
city: "北京",
street: "中关村"
}
});
// 查询
db.users.find({ age: { $gt: 20 } });
// 更新
db.users.updateOne(
{ name: "张三" },
{ $set: { age: 26 } }
);
// 聚合查询
db.orders.aggregate([
{ $group: { _id: "$product", total: { $sum: "$amount" } } }
]);
部署方式:
- 单机部署 - 开发环境
- 副本集 - 生产环境高可用
- 分片集群 - 大数据量水平扩展
3/适合存储的数据类型
✅ 适合的场景:
-
JSON/文档型数据
- 用户档案(动态属性)
- 产品目录(变体多)
- 社交媒体数据(点赞、评论、分享)
-
半结构化/无固定模式数据
- 日志数据
- IoT设备数据
- 移动应用数据
-
需要快速迭代的项目
- 初创公司MVP
- 原型开发
- A/B测试数据
-
大数据量高读写
- 实时分析
- 内容管理系统
- 电商平台的商品信息
-
地理位置数据
- MongoDB有强大的地理空间索引
- 附近的人/地点搜索
- 路径规划
❌ 不适合的场景:
- 需要复杂事务(虽然有支持,但不是强项)
- 严格的关系型数据(多表复杂JOIN)
- 高度结构化的财务报表
- 数据一致性要求极高的银行核心系统
4/典型应用案例
- 腾讯游戏:存储玩家数据、游戏日志
- 阿里云:部分监控数据存储
- eBay:商品分类、元数据管理
- Forbes:内容管理系统
5/总结对比
| 特性 | MongoDB | 传统SQL数据库 |
|---|---|---|
| 数据模型 | 文档型,灵活 | 表结构,固定 |
| 扩展方式 | 水平扩展(分片) | 垂直扩展为主 |
| 事务支持 | 4.0+版本支持多文档事务 | 强事务支持 |
| 查询语言 | MQL(基于JSON) | SQL |
| 适用场景 | 快速变化的数据、大数据 | 结构化数据、强一致性 |
简单判断原则:如果你的数据像“文档”而不是“表格”,需要快速迭代,或者数据量增长很快,MongoDB是很好的选择。如果是复杂的财务系统或需要大量关联查询的传统业务,关系型数据库可能更合适。