使用 Mongoose ODM 进行数据建模,支持复杂查询、索引优化、数据验证和关联查询,构建高性能的数据持久层。
灵活的 JSON 文档结构,无需预定义表结构,支持嵌套文档和数组
支持复杂查询、聚合管道、全文搜索、地理空间查询
内置分片支持,轻松应对 PB 级海量数据存储
内存映射文件、索引优化、读写分离,毫秒级响应
副本集自动故障转移,数据多副本存储,99.99% 可用性
支持多文档 ACID 事务,保证数据一致性
| 特性 | MongoDB | MySQL |
|---|---|---|
| 数据模型 | 文档(JSON/BSON) | 表(行和列) |
| Schema | 灵活,可动态修改 | 固定,需要迁移 |
| 关联查询 | 嵌套文档 / $lookup | JOIN |
| 扩展方式 | 水平扩展(分片) | 垂直扩展为主 |
| 适用场景 | 高并发、大数据、敏捷开发 | 复杂事务、强一致性 |
使用 Mongoose Schema 定义文档结构、数据类型、验证规则、默认值、虚拟属性和中间件。
MongoDB 的设计理念是"为查询而设计"。先确定你的查询模式,再设计 Schema 结构。
| 操作符 | 说明 | 示例 |
|---|---|---|
$eq / $ne |
等于 / 不等于 | { age: { $eq: 18 } } |
$gt / $gte |
大于 / 大于等于 | { age: { $gte: 18 } } |
$lt / $lte |
小于 / 小于等于 | { age: { $lt: 60 } } |
$in / $nin |
在数组中 / 不在数组中 | { role: { $in: ['admin', 'mod'] } } |
$regex |
正则匹配 | { name: { $regex: /^张/, $options: 'i' } } |
$exists |
字段是否存在 | { avatar: { $exists: true } } |
$and / $or |
逻辑与 / 或 | { $or: [{ a: 1 }, { b: 2 }] } |
聚合管道是 MongoDB 最强大的数据处理功能,可以进行复杂的数据转换、分组、统计等操作。
| 阶段 | 说明 |
|---|---|
$match |
过滤文档,类似 find() 的查询条件 |
$group |
分组并计算聚合值(sum, avg, max, min 等) |
$project |
选择、重命名、计算字段 |
$lookup |
左外连接,关联其他集合 |
$unwind |
展开数组,每个元素生成一个文档 |
$sort |
排序 |
$limit / $skip |
分页 |
$facet |
多管道并行处理 |
索引会占用磁盘空间并降低写入性能。只为常用查询创建索引,避免过度索引。复合索引遵循最左前缀原则。
MongoDB 4.0+ 支持多文档 ACID 事务,确保跨集合操作的原子性。