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 等欄位連線,而不是一個單一文件包含詹姆斯·喬伊斯及其所有作品的資訊。

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

MongoDB 文件與 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 是一個典型的觀鳥者、嘻哈愛好者和書蟲,也喜歡撰寫關於資料庫的文章。他目前住在柏林,人們經常看到他像利奧波德·布魯姆一樣漫無目的地在城市中漫步。
© . This site is unofficial and not affiliated with Prisma Data, Inc.