Skip to content

MongoDB

最受歡迎的 NoSQL 文件資料庫

軟體分類 程式開發 / 資料庫
軟體標籤
Stellariummusic editorsGNU (GPL)Creative Commons Attribution-ShareAlike 2.0 license
開發廠商 MongoDB, Inc.
Stars
28.3k
Forks
5.8k
License
SSPL (SERVER SIDE PUBLIC LICENSE)
Version
v8.0.4
Update
2026-03-10
OS

產品說明

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 傳感器數據或金融報價的儲存與查詢效率。

操作介面