MongoDB
最受歡迎的 NoSQL 文件資料庫
軟體分類 程式開發 / 資料庫
軟體標籤
Stellariummusic editorsGNU (GPL)Creative Commons Attribution-ShareAlike 2.0 license
開發廠商 MongoDB, Inc.
產品說明
MongoDB 是全球市佔率最高的 NoSQL(Not Only SQL)資料庫,它打破了傳統關聯式資料庫(如 MySQL, PostgreSQL)必須定義固定表格(Table)與關聯(Relation)的限制。
MongoDB 採用 文件導向(Document-Oriented) 的資料模型,資料以 BSON(Binary JSON)格式儲存。這意味著你可以將複雜的巢狀資料結構(如陣列、子物件)直接存入資料庫,無需拆解成多個表格。這種「Schema-less(無固定結構)」的特性,讓它極度適合快速迭代的敏捷開發、內容管理系統(CMS)、行動應用後端以及大數據分析場景。
核心特色:
- 靈活的文件模型:資料以類 JSON 格式儲存,欄位可以隨時新增或修改,無需執行耗時的
ALTER TABLE操作。 - 水平擴展 (Sharding):原生支援分片技術,將巨量資料自動分散到多台伺服器上,輕鬆應對 PB 級別的資料量。
- 高可用性 (Replica Sets):透過副本集機制,自動將資料複製到多個節點;當主節點故障時,系統會自動選舉新主節點,實現自動故障轉移。
- 強大的查詢語言 (MQL):提供豐富的查詢語法,支援地理空間搜尋(Geospatial)、全文檢索以及強大的聚合框架(Aggregation Framework)。
- 高效能:預設使用 WiredTiger 儲存引擎,提供優秀的壓縮率與併發處理能力。
常用指令
雖然 MongoDB 官方提供了強大的圖形介面 MongoDB Compass,但對於開發者而言,掌握 MongoDB Shell (mongosh) 的指令操作是必備技能。
連線與基礎操作
// 啟動 MongoDB Shell 並連線到本機
mongosh
// 連線到遠端資料庫 (支援連線字串)
mongosh "mongodb+srv://user:password@cluster0.example.net/mydb"
// 切換資料庫 (若不存在則會在寫入資料時自動建立)
use my_database
CRUD 資料操作
MongoDB 的操作是針對 Collection(類似 SQL 的 Table)進行的:
// 插入一筆文件 (Create)
db.users.insertOne({
name: "Gemini",
role: "AI",
tags: ["smart", "helpful"],
specs: { ram: "128GB", cpu: "TPU" }
})
// 查詢資料 (Read)
// 尋找 role 為 "AI" 的使用者,並隱藏 _id 欄位
db.users.find({ role: "AI" }, { _id: 0, name: 1 })
// 更新資料 (Update)
// 將 name 為 "Gemini" 的使用者,增加一個 new_tag
db.users.updateOne(
{ name: "Gemini" },
{ $push: { tags: "new_tag" } }
)
// 刪除資料 (Delete)
db.users.deleteOne({ name: "Gemini" })
| 指令 | 功能說明 | SQL 對照 |
|---|---|---|
show dbs | 列出所有資料庫 | SHOW DATABASES |
show collections | 列出當前庫的所有集合 | SHOW TABLES |
db.coll.find() | 查詢所有文件 | SELECT * FROM coll |
db.coll.countDocuments() | 計算文件數量 | SELECT COUNT(*) FROM coll |
db.coll.createIndex({name: 1}) | 建立索引 (1為升序) | CREATE INDEX ON coll(name) |
db.coll.aggregate([...]) | 聚合管線運算 | GROUP BY / JOIN 等複雜查詢 |
進階技巧
- 聚合管線 (Aggregation Pipeline):這是 MongoDB 處理複雜資料分析的核心。
// 範例:計算每個 role 的使用者數量 db.users.aggregate([ { $match: { active: true } }, // 第一步:只篩選活躍用戶 { $group: { _id: "$role", count: { $sum: 1 } } } // 第二步:分組計數 ]) - 交易 (Transactions):自 4.0 版本起,MongoDB 支援跨文件的 ACID 交易,這使得它在需要高資料一致性的場景(如金融轉帳)中也能勝任。
- Time Series Collections:MongoDB 5.0 引入了原生的時間序列集合,專門優化 IoT 傳感器數據或金融報價的儲存與查詢效率。
操作介面
