MongoDB 是文件資料庫,以簡單易用、可靈活擴充著稱。相較於 PostgreSQL 等關聯式資料庫採用的傳統資料表格式,這種 NoSQL 資料庫的資料儲存方式更靈活有彈性。
MongoDB 不會透過資料列和資料欄儲存資料,而是採用類似 JSON 的文件格式,其中包含可彈性自訂的欄位和對應的值。以下提供簡單範例,說明如何透過文件使用者個人資料:
“_id”: “6327c1a4b3e3e8a5e6f7g6j1”,
“first_name”: “Praveen”,
“occupation”: “Developer”,
“employment_date”: “12/1/2025”
MongoDB 的結構定義相當有彈性,因此不必所有文件都使用相同的欄位。您可以去掉「occupation」欄位,改加上「email_address」欄位等。
不過,如果同一種資料在不同文件中的儲存方式不一致,例如有的使用「email」欄位,有的卻用「email_address」,或以不同格式儲存日期,這種彈性也可能會在日後造成困擾。
如果使用關聯式資料庫來儲存這類資料 (也就是部分使用者個人資料有記錄職業,部分沒有),可能會導致資料表過於龐大,出現許多空白欄位,或是必須採用複雜且重複的結構,將資料分散到多個資料表中。
想直接開始設定文件導向的資料庫嗎?請按這裡,瞭解如何開始使用 Firestore。
MongoDB 是 NoSQL 文件資料庫,適用於處理大量非結構化或半結構化資料。以下簡單說明 MongoDB 的主要特色和優點:
MongoDB (包括原始產品和其他多種相容的資料庫) 在簡單易用的設計中融入絕佳的靈活彈性,因此成為開發人員的熱門選擇。
MongoDB 的查詢語言 (MQL) 採用開發人員慣用的語法設計,熟悉 JavaScript 的使用者特別容易上手,可直接輕鬆寫出功能強大的查詢,用來擷取、更新或刪除資料。
您可以靈活運用各種類型的查詢,找出確切符合需求的資料,其中包括:
整體而言,MongoDB 的強項是擷取完整物件的資訊。舉例來說,如果您想收集某位使用者的所有資訊,包括姓名、訂單記錄和偏好 (這些資料可能都儲存在同一份文件中),只要執行一次查詢,就能迅速取得所需的全部內容。
不過,如果查詢需要對多個高度結構化的集合執行複雜的彙整作業 (這是關聯式資料庫擅長處理的情況),MongoDB 的效率就會比較低。
MongoDB 特別適合用於滿足各種現代應用需求,包括:
MongoDB 的文件模型十分靈活有彈性,非常適合用來儲存文章、留言、使用者資料和其他各種內容,不必受限於嚴格的結構定義。
零售產品通常有各種屬性 (尺寸、顏色、材質等),MongoDB 能輕鬆支援這些多樣化的資料點。
MongoDB 可儲存及處理大量感應器資料、事件和指標,讓系統提供即時洞察資訊。
MongoDB 的 JSON 格式能讓您輕鬆儲存使用者偏好、瀏覽記錄和個人化內容。
MongoDB 是許多應用場景的理想資料庫選擇,特別適合以半結構化或非結構化資料為主,或是資料模型可能持續進化的系統。不過,建議您也評估其他資料庫選項,確保做出正確決定。
視具體用途而定,MongoDB、Apache Cassandra 和 SQL 資料庫各有獨特的優勢,可滿足不同需求。下表列出這些選項的部分差異,協助您根據自己的應用情境選擇適用的資料庫。
功能 | SQL 資料庫 (關聯式) | MongoDB (NoSQL) | Apache Cassandra (NoSQL) |
資料模型 | 表格式 (資料列和資料欄) | 類似 JSON 的文件 | 寬欄儲存庫 (資料表內每列可彈性採用不同的資料欄) |
結構定義 | 預先定義的固定結構定義 | 有彈性的動態結構定義 | 結構比文件資料庫更嚴謹,但仍有一定的彈性 (每列可以有不同的資料欄) |
查詢語言 | SQL (結構化查詢語言) | MongoDB 查詢語言 (MQL) | Cassandra 查詢語言 (CQL) |
擴充性 | 以垂直擴充為主,水平擴展則較為複雜 | 透過 sharding 進行水平擴展 | 能跨多個節點水平擴展,專為大規模分散部署而設計 |
資料結構 | 結構化資料 | 非結構化、半結構化和結構化資料 | 非結構化、半結構化和結構化資料 |
關係 | 外鍵和 JOIN | 嵌入文件、參照 | 去標準化 |
適用情境 | 需維持資料高度一致,以及使用 JOIN 進行複雜查詢的應用 | 快速開發、資料模型持續進化,以及簡單易用的設計 | 寫入處理量極高、高可用性和大規模資料 |
功能
SQL 資料庫 (關聯式)
MongoDB (NoSQL)
Apache Cassandra (NoSQL)
資料模型
表格式 (資料列和資料欄)
類似 JSON 的文件
寬欄儲存庫 (資料表內每列可彈性採用不同的資料欄)
結構定義
預先定義的固定結構定義
有彈性的動態結構定義
結構比文件資料庫更嚴謹,但仍有一定的彈性 (每列可以有不同的資料欄)
查詢語言
SQL (結構化查詢語言)
MongoDB 查詢語言 (MQL)
Cassandra 查詢語言 (CQL)
擴充性
以垂直擴充為主,水平擴展則較為複雜
透過 sharding 進行水平擴展
能跨多個節點水平擴展,專為大規模分散部署而設計
資料結構
結構化資料
非結構化、半結構化和結構化資料
非結構化、半結構化和結構化資料
關係
外鍵和 JOIN
嵌入文件、參照
去標準化
適用情境
需維持資料高度一致,以及使用 JOIN 進行複雜查詢的應用
快速開發、資料模型持續進化,以及簡單易用的設計
寫入處理量極高、高可用性和大規模資料
SQL 資料庫 (例如 PostgreSQL) 和 NoSQL 文件資料庫 (例如 MongoDB) 代表了兩種基本的資料管理方法。
與 MongoDB 不同的是,SQL 資料庫 (又稱關聯式資料庫) 會將資料整理成資料表。每個資料表都有預先定義的格式,包含資料列和資料欄,因此相較於 MongoDB 的文件格式,SQL 資料庫通常被視為採用「固定」結構。
PostgreSQL 等 SQL 資料庫的優勢在於,能夠執行含 JOIN 的複雜查詢,高效合併多個資料表的資訊。舉例來說,可以執行「顯示上個月購買藍色襯衫且年紀超過 30 歲的芝加哥顧客」這樣的查詢。
MongoDB 和 Apache Cassandra 都是功能強大的 NoSQL 資料庫,但兩者採用截然不同的架構,適合的用途也不同。
Apache Cassandra 是寬欄儲存庫,以資料列和資料欄的形式整理資料,但結構定義相當有彈性,因此在同一資料欄系列中,不同資料列可以有不同的資料欄。
此外,Apache Cassandra 也以能在多部伺服器上處理大量資料而聞名,可在分散式系統中提供高可用性和高寫入效能。
如要使用 MongoDB 建構內容,有幾種做法可以選擇。您可以直接透過開發商 MongoDB Inc. 取得資料庫,也可以使用其他供應商提供的 MongoDB 相容服務。所謂「相容」,是指支援 MongoDB API 和查詢語言 (MQL),因此您只需稍做調整,就能沿用相同的程式碼、驅動程式和工具,同時享有額外功能或效能優勢。
以下列舉幾個最知名的 MongoDB 相容選項:
文件資料庫是一種 NoSQL 資料庫,會將資料儲存在稱為「文件」的彈性單元中,這些單元通常採用類似 JSON 的結構。與含有資料列和資料欄的表格不同,這些文件會以「欄位:值」組合的形式編排資訊,例如「Name」:「John」
每份文件通常包含一個物件的資料,例如商品目錄中的產品。您可以在多個文件使用不同欄位,如果不想在開始建構應用程式前,就設計出完美的資料結構,或是要儲存具有各種變數的物件資訊,這類資料庫會是絕佳選擇。
資料庫類型取決於您要儲存的資料種類、應用程式需求,以及您需要的彈性程度。
文件資料庫非常適合處理變數多的資料,因為並非每個物件都需要相同欄位。文件資料庫的彈性也讓開發人員愛不釋手,他們可以快速建構資料結構,並隨著時間變更。
另一方面,如果想確保資料嚴格一致,例如使用者帳戶中每個項目都必須填入完全相同的欄位,關聯式資料庫會是較佳選擇。如果您的應用程式需要使用 join 執行複雜查詢,從多個資料表擷取資料來產生結果,那麼關聯式資料庫就是理想的工具。
在與資料庫互動方面,MongoDB 支援多種程式設計語言,包括 JavaScript、Python、Java、C#、C++ 等。MongoDB 查詢語言 (MQL) 用於資料庫作業,是一種類似 JSON 的語言。
MongoDB 一般認為是容易入門的資料庫,其採用類似 JSON 的資料結構 (BSON) 和彈性結構定義,因此現代開發人員可直覺進行基本資料儲存和擷取作業。不過,在進階用途方面,由於設計有效率的資料模型 (嵌入對比參照) 相當複雜,且需要精通多階段彙整框架,才能進行複雜查詢和高效能擴充,因此掌握起來可能較困難。
Firestore 是全代管文件資料庫,可簡化雲端資料管理作業,並與 Firebase 完美整合。Firebase 是建構 AI 應用程式和代理的專用平台。
Firestore 完全相容於 MongoDB 驅動程式、工具和程式碼。無論是啟動新專案或遷移現有應用程式,您都能使用熟悉的查詢語言和功能。