MongoDB

什麼是 MongoDB?

分享到

什麼是 MongoDB?

MongoDB 是一個開源、面向文件的 NoSQL 資料庫系統。資料使用類似 JavaScript 物件表示法 (JSON) 的結構儲存,這些結構可以在資料儲存時指定。

每個文件都可以有自己的結構,根據需要具有或多或少的複雜性。MongoDB 提供非 SQL 方法和命令,以程式化或互動方式管理和查詢資料。MongoDB 以其快速的效能、可擴展性以及實現快速開發步調而聞名。

起源故事

MongoDB 由 Dwight Merriman、Eliot Horowitz 和 Kevin Ryan 於 2007 年創立。他們之前在一家網路廣告公司工作,該公司每秒服務 40 萬個廣告。

該團隊正在開發許多自訂資料儲存庫以適應此流量。他們經常在可擴展性和敏捷性方面遇到困難,這啟發了他們創建一個解決這些問題的資料庫。於是,MongoDB 就誕生了。

運作方式

為了實現更好的可擴展性和敏捷性,MongoDB 使用 JSON 變體,即二進位 JSON 或 BSON。BSON 比 JSON 可容納更多資料類型,為可以儲存在 MongoDB 中的資料類型提供了更大的彈性。

MongoDB 資料結構

MongoDB 沒有由欄位組成的表格,而是由集合組成,而集合又由文件組成。文件由欄位對組成。與關聯式資料庫相比,組成 MongoDB 資料庫的各個部分可以大致認為如下

關聯式文件
表格=集合
=文件
=欄位

基本結構如下所示

{
field1: value1,
field2: value2,
field3: value3,
...
fieldN: valueN
}

文件看起來非常類似 JSON 物件。文件可以包含任何可用的 BSON 資料類型,以及其他文件、陣列和文件陣列。這種 JSON 樣式的格式直接對應於大多數現代程式語言中的原生物件,使其成為開發人員的自然選擇。

一個範例看起來會像這樣

var mydoc = {
_id: ObjectId("5099803df3f4948bd2f98391"),
name: { first: "James", last: "Joyce" },
birth: new Date('Feb 02, 1882'),
death: new Date('Jan 14, 1941'),
books: [ "Ulysses", "Dubliners","Finnegan's Wake" ],
sales : NumberLong(1250000)
}
  • _id 持有一個[ObjectId].
  • name 持有一個嵌入式文件,其中包含欄位 firstlast
  • birthdeath 持有[Date]類型的值。
  • books 持有一個[字串].
  • sales 持有[NumberLong]類型的值。

類型的值。根據資料模型,關聯式資料庫可能會使用 author 表格和 book 表格(使用類似 author_id 的東西連接),而不是使用單一文件來容納有關 James Joyce 及其作品的所有資訊。

在這個特定的簡單用例中,文件模型簡化了資料存取,並將一起存取的資料儲存在一起。

MongoDB 文件 vs SQL 表格記錄

在先前的範例基礎上,讓我們看看 MongoDB 中的文件與關聯式資料庫中相同的記錄相比如何。在關聯式資料庫中,儲存記錄的表格可能看起來像這樣

primary_key | first_name | last_name | age | email | phone_number |
----------- | ---------- | --------- | --- | -------------------- | ------------ |
1 | Tom | Brown | 38 | tom.b@email.com | 555-3802 |
2 | Sarah | Green | 84 | (NULL) | 555-8088 |
3 | Sam | White | 22 | sammi@123.org | 555-1234 |

然而,正如我們之前在作者文件中看到的那樣,MongoDB 中類似文件的集合可能會以 JSON 形式塑模如下

{
primary_key: 1,
first_name: "Tom",
last_name: "Brown",
age: 38,
email_address: "tom.b@email.com",
phone_number: "555-3802"
},
{
primary_key: 2,
first_name: "Sarah",
last_name: "Green",
age: 84,
phone_number: "555-8088"
},
{
primary_key: 3,
first_name: "Sam",
last_name: "White",
age: 22,
email_address: "sammi@123.org",
phone_number: "555-1234",
notes: [
"High value customer",
"Has a dog named Fido"
]
}

決定使用文件資料庫還是關聯式資料庫取決於資料庫儲存的資料類型以及應如何存取它。MongoDB 的文件促進了靈活性而非嚴格性,並簡化了從應用程式存取資料的方式。

MongoDB 查詢語言

由於 MongoDB 資料庫是面向文件的,因此資料通常不遵循像關聯式資料庫那樣的預定義結構描述。這使得存取資料的方式與使用結構化查詢語言 (SQL) 查詢關聯式資料庫時不同。MongoDB 有自己的查詢語言,簡稱為 MongoDB 查詢語言 (MQL)。

與 SQL 類似,MQL 也允許使用者在特定規範下存取資料。您可以控制返回符合需求標準的文件。在本指南中,我們不會深入探討 MongoDB 中查詢的更精細細節,但您可以在我們的 MongoDB 查詢指南中閱讀更多相關資訊。

MongoDB 中查詢的基本語法看起來會像這樣

db.<collection_name>.find()

為了產生更美觀的查詢結果格式,您可以使用 .pretty()

db.<collection_name>.find().pretty()

結論

MongoDB 已成為市場上最受歡迎的 NoSQL 資料庫。開發人員喜歡使用 MongoDB,因為它能夠讓他們靈活且敏捷地工作。

MongoDB 提供了關聯式資料庫嚴格性的替代方案,更適合具有不斷演進的結構描述的應用程式。查看我們的一些其他 MongoDB 內容,以獲取有關MongoDB 入門、索引、交易等的深入指南

關於作者
Alex Emerich

Alex Emerich

Alex 是典型的賞鳥、嘻哈愛好者、書蟲,也喜歡撰寫有關資料庫的文章。他目前住在柏林,在那裡可以看到他像李奧波德·布盧姆一樣漫無目的地走在城市中。