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);