MongoDB 是一個面向文檔的數據庫,它的核心概念與傳統的關系型數據庫(RDBMS)有所不同。以下是它的四個主要核心概念:
-
文檔 (Document)
- 定義: 文檔是 MongoDB 中的基本數據單元。它類似于關系型數據庫中的一行記錄,但比行更靈活和強大。
- 結構: 文檔是一組鍵值對 (key-value pairs)。這些鍵值對是有序的。
- 格式: 文檔的結構非常類似于 JSON (JavaScript Object Notation)。MongoDB 內部使用 BSON (Binary JSON) 格式來存儲文檔,BSON 是 JSON 的二進制表示形式,它支持更多的數據類型,并且更易于高效地掃描和編碼。
- 特點:
- 每個文檔都有一個唯一的
_id
字段,它作為文檔的主鍵標識。 - 文檔的字段值可以是各種數據類型,包括字符串、數字、布爾值、數組,甚至可以是嵌套的文檔。
- 同一個集合中的文檔可以有不同的結構(字段可以不同、數據類型可以不同),這就是所謂的“無模式”或“靈活模式”。
- 每個文檔都有一個唯一的
- 類比關系型數據庫: 類似于關系型數據庫中的一行 (Row)。
-
集合 (Collection)
- 定義: 集合是 MongoDB 中文檔的容器,它是一組相關的文檔。
- 結構: 集合沒有強制的結構定義(模式),這意味著一個集合中的文檔可以有不同的字段和結構。
- 特點:
- 集合存在于數據庫中。
- 你不需要預先創建集合,當你向一個不存在的集合插入第一個文檔時,MongoDB 會自動創建該集合。
- 集合可以包含大量文檔,文檔的數量沒有固定限制。
- 類比關系型數據庫: 類似于關系型數據庫中的表 (Table)。
-
數據庫 (Database)
- 定義: 數據庫是 MongoDB 中集合的容器,它是一組相關的集合。
- 結構: 數據庫提供了組織和管理集合的邏輯命名空間。
- 特點:
- 一個 MongoDB 實例可以擁有多個數據庫。
- 每個數據庫都有自己的一組集合。
- 權限管理、復制和分片等操作通常在數據庫級別進行配置。
- 類比關系型數據庫: 與關系型數據庫中的數據庫 (Database) 概念是直接對應的。
-
BSON (Binary JSON)
- 定義: BSON 是 MongoDB 用于存儲文檔和進行網絡傳輸的二進制序列化格式。它是 JSON 的超集。
- 目的:
- 效率: BSON 設計得比 JSON 更快地解析和掃描。它包含長度前綴,使得跳過不需要的字段或確定文檔大小變得容易。
- 數據類型: BSON 支持比標準 JSON 更多的數據類型,如日期、二進制數據、ObjectId(用于生成唯一的
_id
)、正則表達式等。這使得 MongoDB 可以存儲更豐富的數據類型而無需特殊處理。
- 特點: 雖然你在與 MongoDB 交互時(如使用 shell 或驅動程序)看到的數據通常以 JSON 或其變體的形式呈現,但 MongoDB 內部實際存儲和處理的是 BSON 格式的數據。
核心概念之間的關系:
可以這樣理解它們之間的層次結構:
一個 MongoDB 實例 可以包含多個 數據庫 (Database)。
每個 數據庫 可以包含多個 集合 (Collection)。
每個 集合 包含多個 文檔 (Document)。
每個 文檔 是由鍵值對組成,內部以 BSON 格式存儲。
用關系型數據庫的類比來說:
- MongoDB 實例 ≈ 數據庫服務器
- 數據庫 ≈ 數據庫
- 集合 ≈ 表
- 文檔 ≈ 行
- 文檔中的鍵值對 ≈ 列
- BSON ≈ 數據的內部存儲格式(沒有直接的 RDBMS 類比,因為它處理的是結構而非扁平的行)
理解這些核心概念是使用 MongoDB 進行數據存儲、查詢和管理的起點。文檔的靈活性和集合的無模式特性是與關系型數據庫最顯著的區別。