認識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 授權成本。

全端網頁開發專業知識分享
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
※ 主題關鍵字 Git flow: ※ 說明: Git Flow 是一種基於 Git 版本控制系統的擴展,用於協助團隊進行項目的軟體開發和版本管理,就流程來說屬於概括性的流程。 這種工作流程定義了一組明確的分支模型,以協助有效地進行功能開發、修復錯誤和發布版本。 Git Flow
※ Express 專案步驟筆記清單 Node.js 環境建置核對 新增專案資料夾 設定 package.json npm init -y 設定程式入口為 app.js 安裝 Express:npm install express 設定主程式 app.js 建構應用程式伺服器 設定
※ 必考題一: Command Line 工程師面試時通常不會著墨太多在此科目上,考題只考涵蓋的基本指令。 ※ 說明:Command Line是使用純文字與電腦溝通的方式,和圖形化介面 GUI是不一樣的。 ※ 常用基本指令: pwd=print the current directory:顯
描述我所瞭解的 Web 攻擊技術 何謂網路攻擊? 駭客透過各種系統漏洞或惡意程式,搭配許多技術和工具進行攻擊。目標是要在企業或個人電腦網路中損害、取得控制權或存取重要的文件和系統。 例如: XSS(Cross-Site Scripting,跨站腳本攻擊/跨網站指令碼):指網路罪犯透過存在安全
※ 效能 What tools would you use to monitor or analyze your performance ? 中文意思:在監控或分析系統性能方面可能會使用哪些工具? ※ 解答: 常見的監控和分析工具,可分成以下6大類: 系統監控工具: 例如,Promethe
※ 主題關鍵字 Git flow: ※ 說明: Git Flow 是一種基於 Git 版本控制系統的擴展,用於協助團隊進行項目的軟體開發和版本管理,就流程來說屬於概括性的流程。 這種工作流程定義了一組明確的分支模型,以協助有效地進行功能開發、修復錯誤和發布版本。 Git Flow
※ Express 專案步驟筆記清單 Node.js 環境建置核對 新增專案資料夾 設定 package.json npm init -y 設定程式入口為 app.js 安裝 Express:npm install express 設定主程式 app.js 建構應用程式伺服器 設定
※ 必考題一: Command Line 工程師面試時通常不會著墨太多在此科目上,考題只考涵蓋的基本指令。 ※ 說明:Command Line是使用純文字與電腦溝通的方式,和圖形化介面 GUI是不一樣的。 ※ 常用基本指令: pwd=print the current directory:顯
描述我所瞭解的 Web 攻擊技術 何謂網路攻擊? 駭客透過各種系統漏洞或惡意程式,搭配許多技術和工具進行攻擊。目標是要在企業或個人電腦網路中損害、取得控制權或存取重要的文件和系統。 例如: XSS(Cross-Site Scripting,跨站腳本攻擊/跨網站指令碼):指網路罪犯透過存在安全
※ 效能 What tools would you use to monitor or analyze your performance ? 中文意思:在監控或分析系統性能方面可能會使用哪些工具? ※ 解答: 常見的監控和分析工具,可分成以下6大類: 系統監控工具: 例如,Promethe
你可能也想看
Google News 追蹤
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
支援Go所有的類型儲存,且可以用原生SQL敘述與跨資料庫查詢。 映射關係 table->struct record->object field->attribute 安裝 go get github.com/astaxie/beego/orm​ go get github.com
Thumbnail
我在之前提到過「朋」跟「友」的概念略有不同,我自己是以 Notion 資料庫的方式來管理跟我有關聯的「人物」,同時也是系統中的一小部分,接下來我們來看看這個資料庫的使用方法,也順便介紹我的設置方法。
Thumbnail
經過前兩篇文章(Notion 是什麼?你適合使用 Notion 嗎、Notion 介面一覽及必備設定)的介紹,相信大家對 Notion 的功能及介面有了大致的瞭解,這次想要與大家分享的是我認為 Notion 中最具代表性的功能,Database。
Thumbnail
學習如何使用Python連接MongoDB進行憑證監控,包括建立MongoDB docker-compose、連接MongoDB、讀取yaml並寫入MongoDB、傳入env以及domain寫入MongoDB、讀取MongoDB、修改MongoDB、刪除MongoDB。
Thumbnail
本文主要在討論以 Docs as Code 方法來撰寫技術文件,此做法能否滿足企業內部對知識管理的需求。
Thumbnail
參考用各國藥典數據庫 (非官方/ 非最新)
Thumbnail
本篇文章將教你如何在Kubernetes cluster內部署一個MongoDB,包括取得Manifests、建立Volume、部署實務、基本操作和結論。透過操作演示,讓你瞭解在實務上如何成功建立MongoDB,並進行基本操作。
Thumbnail
加入免費👉Discord群組接收每日市場要聞、經濟數據和文章更新通知。
Thumbnail
詳細解說如何在 Mac 上透過 Docker 安裝 MongoDB 社群版。包括 MongoDB Compass 的安裝與配置,以及 MongoDB Shell 的使用方法,為開發者提供 MongoDB 學習資源。
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
支援Go所有的類型儲存,且可以用原生SQL敘述與跨資料庫查詢。 映射關係 table->struct record->object field->attribute 安裝 go get github.com/astaxie/beego/orm​ go get github.com
Thumbnail
我在之前提到過「朋」跟「友」的概念略有不同,我自己是以 Notion 資料庫的方式來管理跟我有關聯的「人物」,同時也是系統中的一小部分,接下來我們來看看這個資料庫的使用方法,也順便介紹我的設置方法。
Thumbnail
經過前兩篇文章(Notion 是什麼?你適合使用 Notion 嗎、Notion 介面一覽及必備設定)的介紹,相信大家對 Notion 的功能及介面有了大致的瞭解,這次想要與大家分享的是我認為 Notion 中最具代表性的功能,Database。
Thumbnail
學習如何使用Python連接MongoDB進行憑證監控,包括建立MongoDB docker-compose、連接MongoDB、讀取yaml並寫入MongoDB、傳入env以及domain寫入MongoDB、讀取MongoDB、修改MongoDB、刪除MongoDB。
Thumbnail
本文主要在討論以 Docs as Code 方法來撰寫技術文件,此做法能否滿足企業內部對知識管理的需求。
Thumbnail
參考用各國藥典數據庫 (非官方/ 非最新)
Thumbnail
本篇文章將教你如何在Kubernetes cluster內部署一個MongoDB,包括取得Manifests、建立Volume、部署實務、基本操作和結論。透過操作演示,讓你瞭解在實務上如何成功建立MongoDB,並進行基本操作。
Thumbnail
加入免費👉Discord群組接收每日市場要聞、經濟數據和文章更新通知。
Thumbnail
詳細解說如何在 Mac 上透過 Docker 安裝 MongoDB 社群版。包括 MongoDB Compass 的安裝與配置,以及 MongoDB Shell 的使用方法,為開發者提供 MongoDB 學習資源。