認識MongoDB

更新於 發佈於 閱讀時間約 7 分鐘

※ 什麼是MongoDB?

MongoDB是一個開源、跨平台的非關聯式資料庫,屬於一種文件導向(Document-oriented database)的資料庫管理系統,也就是 NoSQL 數據庫管理系統(DBMS)。

※ 什麼是非關聯式資料庫(NoSQL)?

非關聯式資料庫(NoSQL)的意思是「Not Only SQL」,又稱「文件資料庫」﹔指的是不限定為關聯式資料庫的資料庫管理系統,以混用關聯式資料庫和非關聯式資料庫來達到最佳的儲存效果。NoSQL資料庫由於使用了彈性較高的 JSON 結構,其實可以不需要Schema,也就是沒有Schema架構(因此稱為 "schema-less"或是"Schema-Free")。NoSQL資料庫,可自由定義資料文件(Document)的結構,以及自由新增欄位。NoSQL 資料庫的主要特點是它們可以快速存儲和檢索大量的非結構化或半結構化資料。這使它們非常適合用於需要快速讀寫以及高吞吐量的使用情境,如:即時分析、物聯網(IoT)和大數據應用。

※ 什麼是Schema ?

Schema 是「資料庫綱要」,這份綱要定義一組資料的組成結構,包括資料的名稱、屬性、資料型別等。與此同時,schema 也會定義資料之間的關聯性以及其限制。

例子 定義 To-do List 的schema

const Schema = mongoose.Schema
const todoSchema = new Schema({
name: {
type: String, // 資料型別是字串
required: true, // 代表這是個必填欄位,若未寫 required,表示此欄位非必填。等同於 required: false 的寫法
},
isdone: {
type: Boolean, // 資料型別是布林值
},
})

例子

  • 每筆 todo 資料都有一個叫做 name 的屬性
  • 我們規定 name 屬性和 isDone 屬性:
  1. type - 設定資料型別。
  2. required - 設定必填,也就屬性值不能為空,否則資料庫會拒絕。
  3. default - 設定預設值,也就是在資料生成時,自動帶入的屬性值。

組成 MongoDB 的關鍵元素

  • 文件(Documents)

Document 是儲存資料的基本單位,每個 Document 都是一個 JSON 格式的資料結構。當使用者將 JSON 文件儲存到 MongoDB 時,系統會將文件以 BSON(Binary JSON)格式儲存。BSON 是 JSON 的二進制表示形式,具有更多資料類型和更快的傳輸速度。在執行查詢時,MongoDB 會檢索相應的 BSON 並將其轉換回 JSON 以供使用者查詢。

一個簡單的 Document 可能如下所示:這個 Document 包括了三個欄位,其中地址是巢狀的 Document。

raw-image
  • 集結(Collection)

Collection 是一個包含多個 Document 的容器。Collections 常被用於組織和儲存相關的 Document。例如,一個 Collection 可能包括一間公司所有員工的 Document。每個 Document 紀錄一位員工的詳細資訊。

在操作方面,Collections 提供了許多方法來查詢、插入、更新和刪除 Document。這種設計讓 Collection 非常靈活,能夠適應不同的資料需求和應用場景。

下圖是資料庫、集結和文件之間的關係。MongoDB 內可以有多個資料庫(Database),資料庫中包含多個集結(Collection),集結中則包含多個文件(Document)。

raw-image


  • _id

_id 欄位是文件的主鍵(Primary Key),代表文件的唯一值。每個文件都會有一個獨特的 _id 值,用於確保集合內資料的一致性和準確性。

raw-image
  • 索引(Indexes)

使用者可以在集結中的任何欄位上建立次級索引,次級索引能幫助使用者更快的搜尋 BSON 文件。次級索引允許使用者在不同欄位上進行快速檢索。次級索引在處理巨量資料時尤其重要,因為執行全集結掃描(Collection Scan)的成本非常高。舉例來說,使用者經常需要根據郵件進行查詢,那麼我們就可以在電子郵件地址這個欄位上建立次級索引,這樣就能直接透過電子郵件地址查詢使用者資料。

MongoDB的優勢

(一)高效能

高效能處理大數據:MongoDB可以處理T級量的資料庫,可將眾多資料庫串聯後,交給大數據,例如:Cloudera等去分析。

(二)JSON 文檔資料庫(Document Database)

MongoDB 採用文件資料庫,將每筆資料以 Document 和 Field 的方式組織資料,它能夠匯總非結構化資料,將它們製作成快速且好看懂的資料目錄。

MongoDB-Document-Database

MongoDB-Document-Database

(三)廣泛支援的程式語言

以下是 MongoDB 支援的各種主流程式語言:

C、C++、C#,Erlang、Haskell、Java、JavaScript、Lisp、fibjs、node.JS、Perl、PHP、Python、Ruby、Scala、Go、Rust。

(四)查詢語言功能強大

支援豐富的查詢語言以支援讀寫操作(CRUD),並支持聚合和其它現代用例,例如:地理搜索、圖形搜索、文本搜索。

(五)提供高可用性架構

MongoDB的複製工具(稱為副本集)有自動故障轉移功能,提供資料的高可用性(High Availability)。

(六)無限制的水平擴充

藉由資料分片(Sharding)功能來達到水平式擴充,提高MongoDB的儲存空間與效能。

(七)新增欄位自由靈活

MongoDB擁有非常彈性的Schema,不需事先創建表格,數據可直接寫入並自由添加欄位。

※ 什麼是ODM?

ODM 是針對文件資料庫 (document database) 使用的一種叫「物件映射 (object mapping)」 的技術,主要是讓開發者可以直接使用物件導向的方式操作資料庫,同時也增加程式碼的易讀性與維護性。

Mongoose 是提供給 Node.js 使用的 MongoDB ODM。透過 Mongoose,我們可以用物件導向語法,以更直覺的方式操作 MongoDB 資料庫。

raw-image

※ 為什麼MongoDB 是企業常用的 NoSQL 資料庫?

彈性的資料結構、分散式水平擴充能力及高可用性、跨區域部署之三大特點兼具 SQL 與 NoSQL 的優點,讓企業用戶在大量或非結構化資料的儲存與管理,如圖檔管理、內容管理、Log 管理、客戶資料管理(貼標) 等情境下,有效提升系統效率並降低 RDBMS 授權成本。

留言
avatar-img
留言分享你的想法!
avatar-img
奧莉薇走在成為後端工程師之路上
18會員
140內容數
全端網頁開發專業知識分享
2025/04/26
※ 場景: 即時聊天應用: 設計一個支持多房間功能的即時聊天平台,像 WhatsApp、LINE或Facebook Messenger,提供文字、語音、視訊聊天功能,方便管理群組聊天。 功能亮點:加入特別功能,例如可加入多房間功能、使用者名單、表情符號支持、文件分享或訊息已讀未讀狀態。 展示
2025/04/26
※ 場景: 即時聊天應用: 設計一個支持多房間功能的即時聊天平台,像 WhatsApp、LINE或Facebook Messenger,提供文字、語音、視訊聊天功能,方便管理群組聊天。 功能亮點:加入特別功能,例如可加入多房間功能、使用者名單、表情符號支持、文件分享或訊息已讀未讀狀態。 展示
2025/04/26
※ 先建立基本的express後端服務: 1.建立新資料夾:Socket mkdir socket 2.進入資料夾:Socket cd ​bsocket 3. 安裝 Experss 到專案中 npm init -y //初始化專案,建立 package.json 檔 npm insta
Thumbnail
2025/04/26
※ 先建立基本的express後端服務: 1.建立新資料夾:Socket mkdir socket 2.進入資料夾:Socket cd ​bsocket 3. 安裝 Experss 到專案中 npm init -y //初始化專案,建立 package.json 檔 npm insta
Thumbnail
2025/04/10
※ 什麼是 Socket.io:一個基於傳統 WebSocket API 之上的框架。 ※ Socket.io常用功能: Custom Events:在 Socket.io 中,開發者可以創建自己的事件來處理特定的功能或需求。 Rooms:分組的功能。每個連接的用戶(或稱為 socket)可
Thumbnail
2025/04/10
※ 什麼是 Socket.io:一個基於傳統 WebSocket API 之上的框架。 ※ Socket.io常用功能: Custom Events:在 Socket.io 中,開發者可以創建自己的事件來處理特定的功能或需求。 Rooms:分組的功能。每個連接的用戶(或稱為 socket)可
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
※ 為什麼選擇SQLite? 安裝簡單:SQLite是一個零配置的資料庫,不需要複雜的設定和安裝過程。。 使用SQL語法。 設計選擇多元性(MySQL / SQLite):適合於小零件資料應用、嵌入式系統、物聯網設備。 ※ SQLite四大優點: 執行檔檔案很小:資料庫系統需要的磁碟空
Thumbnail
※ 為什麼選擇SQLite? 安裝簡單:SQLite是一個零配置的資料庫,不需要複雜的設定和安裝過程。。 使用SQL語法。 設計選擇多元性(MySQL / SQLite):適合於小零件資料應用、嵌入式系統、物聯網設備。 ※ SQLite四大優點: 執行檔檔案很小:資料庫系統需要的磁碟空
Thumbnail
支援Go所有的類型儲存,且可以用原生SQL敘述與跨資料庫查詢。 映射關係 table->struct record->object field->attribute 安裝 go get github.com/astaxie/beego/orm​ go get github.com
Thumbnail
支援Go所有的類型儲存,且可以用原生SQL敘述與跨資料庫查詢。 映射關係 table->struct record->object field->attribute 安裝 go get github.com/astaxie/beego/orm​ go get github.com
Thumbnail
我在之前提到過「朋」跟「友」的概念略有不同,我自己是以 Notion 資料庫的方式來管理跟我有關聯的「人物」,同時也是系統中的一小部分,接下來我們來看看這個資料庫的使用方法,也順便介紹我的設置方法。
Thumbnail
我在之前提到過「朋」跟「友」的概念略有不同,我自己是以 Notion 資料庫的方式來管理跟我有關聯的「人物」,同時也是系統中的一小部分,接下來我們來看看這個資料庫的使用方法,也順便介紹我的設置方法。
Thumbnail
經過前兩篇文章(Notion 是什麼?你適合使用 Notion 嗎、Notion 介面一覽及必備設定)的介紹,相信大家對 Notion 的功能及介面有了大致的瞭解,這次想要與大家分享的是我認為 Notion 中最具代表性的功能,Database。
Thumbnail
經過前兩篇文章(Notion 是什麼?你適合使用 Notion 嗎、Notion 介面一覽及必備設定)的介紹,相信大家對 Notion 的功能及介面有了大致的瞭解,這次想要與大家分享的是我認為 Notion 中最具代表性的功能,Database。
Thumbnail
學習如何使用Python連接MongoDB進行憑證監控,包括建立MongoDB docker-compose、連接MongoDB、讀取yaml並寫入MongoDB、傳入env以及domain寫入MongoDB、讀取MongoDB、修改MongoDB、刪除MongoDB。
Thumbnail
學習如何使用Python連接MongoDB進行憑證監控,包括建立MongoDB docker-compose、連接MongoDB、讀取yaml並寫入MongoDB、傳入env以及domain寫入MongoDB、讀取MongoDB、修改MongoDB、刪除MongoDB。
Thumbnail
本篇文章將教你如何在Kubernetes cluster內部署一個MongoDB,包括取得Manifests、建立Volume、部署實務、基本操作和結論。透過操作演示,讓你瞭解在實務上如何成功建立MongoDB,並進行基本操作。
Thumbnail
本篇文章將教你如何在Kubernetes cluster內部署一個MongoDB,包括取得Manifests、建立Volume、部署實務、基本操作和結論。透過操作演示,讓你瞭解在實務上如何成功建立MongoDB,並進行基本操作。
Thumbnail
詳細解說如何在 Mac 上透過 Docker 安裝 MongoDB 社群版。包括 MongoDB Compass 的安裝與配置,以及 MongoDB Shell 的使用方法,為開發者提供 MongoDB 學習資源。
Thumbnail
詳細解說如何在 Mac 上透過 Docker 安裝 MongoDB 社群版。包括 MongoDB Compass 的安裝與配置,以及 MongoDB Shell 的使用方法,為開發者提供 MongoDB 學習資源。
Thumbnail
建立一個屬於自己喜愛球員的清單。 ※ 專案開發環境 架設 Node.js 伺服器。 用 Express.js 進行全端開發。 用 MongoDB 資料庫。 ※ 專案開發技術 使用 Express handlebars,為球員清單做出佈局和局部樣板
Thumbnail
建立一個屬於自己喜愛球員的清單。 ※ 專案開發環境 架設 Node.js 伺服器。 用 Express.js 進行全端開發。 用 MongoDB 資料庫。 ※ 專案開發技術 使用 Express handlebars,為球員清單做出佈局和局部樣板
Thumbnail
我們在「【資料庫寶典】什麼是NoSQL?能吃嗎?」有談到一些NoSQL的特性,雖然本質上有所差異,但兩方技術發展的產品也都開始互相支援了,比如說MongoDB後來也發展出類SQL語法讓熟悉SQL的開發者可以降低進入門檻,而SQL、postgresql…等也紛紛納入一些NoSQL的元素,雙方都有開始接
Thumbnail
我們在「【資料庫寶典】什麼是NoSQL?能吃嗎?」有談到一些NoSQL的特性,雖然本質上有所差異,但兩方技術發展的產品也都開始互相支援了,比如說MongoDB後來也發展出類SQL語法讓熟悉SQL的開發者可以降低進入門檻,而SQL、postgresql…等也紛紛納入一些NoSQL的元素,雙方都有開始接
Thumbnail
MongoDB 簡介 MongoDB是一種開源的NoSQL文件資料庫(Document Database),MongoDB中可以有多個Database,每個Database中可以有多個Collection,每個Collection中可以有多個Document。 Windows 安裝 MongoDB
Thumbnail
MongoDB 簡介 MongoDB是一種開源的NoSQL文件資料庫(Document Database),MongoDB中可以有多個Database,每個Database中可以有多個Collection,每個Collection中可以有多個Document。 Windows 安裝 MongoDB
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News