mongodb nosql数据库笔记
MongoDB 简介
MongoDB 是一个开源的 NoSQL 数据库,采用文档存储模型(BSON 格式,类似 JSON),支持高灵活性、水平扩展和高性能的数据操作。与传统关系型数据库(如 MySQL)不同,MongoDB 无需预定义表结构,适合处理半结构化或非结构化数据。
MongoDB 核心特性
文档模型
数据以文档形式存储,每个文档包含键值对,嵌套结构支持复杂数据类型。示例文档:
{"_id": ObjectId("507f191e810c19729de860ea"),"name": "Alice","age": 30,"address": {"city": "New York","zip": "10001"}
}
高性能
支持索引、聚合管道和内存映射文件,读写速度快。
// 创建索引
db.users.createIndex({ name: 1 });
水平扩展(分片)
通过分片(Sharding)将数据分布到多个服务器,支持海量数据存储。
高可用性
副本集(Replica Set)提供自动故障转移和数据冗余。
基础操作
插入数据
db.users.insertOne({name: "Bob",age: 25,hobbies: ["reading", "hiking"]
});
查询数据
// 查找所有年龄大于 20 的用户
db.users.find({ age: { $gt: 20 } });// 使用聚合管道分组统计
db.users.aggregate([{ $group: { _id: "$city", count: { $sum: 1 } } }
]);
更新数据
db.users.updateOne({ name: "Bob" },{ $set: { age: 26 } }
);
删除数据
db.users.deleteOne({ name: "Alice" });
适用场景
- 实时分析:快速处理日志、传感器数据等时序数据。
- 内容管理:灵活存储文章、评论等嵌套内容。
- 物联网(IoT):高效存储设备生成的异构数据。
- 移动应用:支持离线同步和灵活的数据模型变更。
不适用场景
- 复杂事务:需跨文档强一致性时(尽管 MongoDB 4.0+ 支持多文档事务,但性能受限)。
- 高度结构化数据:固定表结构且关系复杂的场景(如财务系统)。
安装与工具
- 官方下载:从 MongoDB官网 获取社区版。
- 命令行工具:
mongosh
(MongoDB Shell)。 - GUI工具:MongoDB Compass、Robo 3T。
性能优化建议
- 合理设计索引,避免全表扫描。
- 使用投影(Projection)限制返回字段。
- 分片键选择需均匀分布数据。
- 监控慢查询日志(
db.setProfilingLevel(2)
)。
// 查看慢查询
db.system.profile.find().sort({ millis: -1 }).limit(10);