MongoDB
什麼是 MongoDB?
什麼是 MongoDB?
MongoDB 是一個開源、面向文件的NoSQL資料庫系統。資料使用類似 JavaScript 物件表示法 (JSON) 的結構儲存,可以在資料儲存時指定。
每個文件都可以有自己的結構,其複雜性可根據需要增減。MongoDB 提供非 SQL 方法和命令,以程式設計方式或互動方式管理和查詢資料。MongoDB 以其快速的效能、可擴充套件性以及實現快速開發週期而聞名。
如果你正在使用 MongoDB,請檢視 Prisma 的MongoDB 聯結器!你可以使用 Prisma Client 自信地管理生產環境的 MongoDB 資料庫。
要開始使用 MongoDB 和 Prisma,請檢視我們的從零開始指南或如何新增到現有專案。
起源故事
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包含一個嵌入式文件,其中包含欄位first和last。birth和death包含[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 入門、索引、事務等的深入指南。
如果你正在使用 MongoDB,請檢視 Prisma 的MongoDB 聯結器!你可以使用 Prisma Client 自信地管理生產環境的 MongoDB 資料庫。
要開始使用 MongoDB 和 Prisma,請檢視我們的從零開始指南或如何新增到現有專案。
