Mongodb 教學:從安裝到啟動基本操作教學

MongoDB 是什麼?

MongoDB 是一個開源 (open source) 的文件資料庫,為了因應大量投遞線上廣告與高速處理廣告數據的需求,在 2007 年由美國公司 10gen 所開發。

MongoDB 是一種 NoSQL(非關聯型)數據庫,以其靈活性、可擴展性和性能而聞名。相較於傳統的 SQL 數據庫如 MySQL 或 PostgreSQL,MongoDB 以文件導向的數據模型,提供更高的彈性和速度。在 MongoDB 中,數據以 BSON(Binary JSON)格式儲存,允許更豐富的數據類型,並支持 Array 和 Document 嵌套。

正如其他技術工具,MongoDB 同時有自己的擅長與不便之處。在業界中,不同的公司、針對不同專案,經常會選擇使用不同的資料庫系統,甚至混合使用。

在這裡,由於 MongoDB 是現階段使用者最多、生態系也最完整的文件資料庫,所以我們選用它作為資料庫的實作工具。

JavaScript 全端開發課程,16 週進度班帶你半年轉職工程師

為什麼要使用 MongoDB?

MongoDB 的靈活性是其最吸引人的特點之一。它的模式是無限制的,這意味著您可以自由地更改您的數據模型而無需進行任何遷移。此外,MongoDB 的水平擴展性使其成為數據密集型或高流量應用的理想選擇。

MongoDB 的優點與缺點

優點:

  1. 靈活性:MongoDB 不需要固定的數據模式,這使得處理不同類型和形態的數據變得更容易。
  2. 擴展性:MongoDB 支持水平擴展,這意味著您可以透過增加更多的機器來處理更大的數據負載。
  3. 性能:由於 MongoDB 使用內部存儲的數據格式(BSON),這可以加快查詢速度。

缺點:

  1. 資料安全性:MongoDB 對於數據的完整性和一致性的支援較弱,這可能使其在需要進行精確計算的應用中不是理想選擇。
  2. 記憶體使用:MongoDB 的索引需要大量的記憶體,並且 MongoDB 需要為每個存活的連線分配獨立的線程和記憶體。

MongoDB 的應用場景

由於 MongoDB 的靈活性和可擴展性,它被用在許多不同的情況下,包括:

  • 實時分析:MongoDB 可以用於處理大量即時數據,使其成為實時分析的理想選擇。
  • 內容管理系統:MongoDB 的彈性模式使其適合用於動態、無結構化的數據,這種數據在內容管理系統中非常常見。
  • 移動應用:MongoDB 能夠處理大量的低延遲查詢,這使得它適合於服務大量的移動應用用戶。
Mongoose
mongoose

Mongoose 是提供給 Node.js 使用的 MongoDB ODM。

mongodb odm

透過 Mongoose,我們可以用物件導向語法,以更直覺的方式操作 MongoDB 資料庫。

資料庫綱要

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

你需要把資料設計的結構,登錄到這份文件裡,然後資料庫會按照在 schema 定義的內容去產生資料表。

文件資料庫由於使用了彈性較高的 JSON 結構,所以其實可以不需要 schema(因此稱為 “schema-less”)。但因為絕大部分應用程式的資料結構都是固定的,所以 Mongoose 還會是讓開發者定義 schema,讓我們能使用它的內建功能去處理與驗證資料。

是否該用 MongoDB?選擇資料庫前你該了解的事

安裝 MongoDB

架設專案環境的第一步,從資料庫的建置開始,也就是安裝 MongoDB,並且啟動 MongoDB 伺服器。

下載 MongoDB 社群版伺服器

官網下載

首先我們要到 MongoDB 官網下載服務,注意 MongoDB 官網以商業版服務 (Atlas) 的介紹為主,而我們現在要使用的是免費開源的社群版服務 (Community Server)。

請到 MongoDB Community Server 的下載中心 (download center):https://www.mongodb.com/download-center/community

mongodb 官網下載

教案中使用的 MongoDB 是 4.2.5 版本。因為版本更新很快,在你學習時,可能已經釋出了其他版本。

建議同學現在也下載 4.2.X 的版本(小更新的差異不大)。作業系統版本選 macOS 64-bit x64,按下 Download,並指定路徑將檔案存放於 Download 資料夾。檔案可能會需要下載一陣子。

按了 Download 鍵之後小心會被導入廣告頁面,注意如果畫面上有類似「Thank you for downloading MongoDB Community Server. Your download will begin shortly.」就表示已經在下載檔案了,你不需要填寫額外的資訊。

設定資料夾目錄

修改資料夾檔名為 mongodb

下載完成後,可以在 Download 資料夾中找到 mongodb-osx-ssl-x86_64-4.2.5.tgz 這個檔案,解壓縮之後會出現一個同名資料夾。

接下來我們要將資料夾移動到專門存放 web app 專案的資料夾內,在本課程裡,我們會一律把專案存放在 Mac 預設的 Home 目錄,也就是 /Users/[你的使用者名稱]/。由於以後用指令呼叫時,會需要輸入資料夾的名稱,所以在移動資料夾以後,請將資料夾改名為 mongodb,方便以後用指令呼叫。

建立新資料夾 mongodb-data 存放資料

剛才的 mongodb 資料夾是放置 MongoDB 系統本身,我們還需要建立另一個新的資料夾,用來存放資料庫紀錄。

請建立一個名為 mongodb-data 的新目錄,請注意要把這個目錄和剛才的 mongodb 放在同一層。

Mongodb data 目錄
系統執行檔 mongodb/bin/

注意上圖,在 mongodb 目錄下有一個叫 bin 的資料夾,這個資料夾裡面存放了 MongoDB 的主要執行檔,裡面有一支叫 mongod 的執行檔,這個執行檔專門用來啟動資料庫,等下我們會用終端機指令來呼叫這個執行檔。

3分鐘小測驗,找到自己的web開發學習入口

啟動 MongoDB 伺服器

現在,請打開你的終端機,我們現在要透過指令來啟動 mongodb/bin 資料夾下的 mongod執行檔,啟動資料庫的伺服器(可以想像成是一個「電腦開機」的概念)。

找到正確的目錄

在終端機裡,切換資料夾的指令是 cd,在指令後空一格加入路徑。而剛才我們把 mongodb 資料夾存在使用者預設目錄裡,預設目錄的代號是 ~,可以寫成這樣:

cd ~

請你切換過去試試看,你還可以更進一步用 ls 把目錄清單列出來,和圖形介面對照看看,確認 mongodb 有沒有在裡面。

啟動mongodb 伺服器

接下來我們要走到執行檔所在的 bin 資料夾,請在 cd 指令後加入路徑,依序為「預設目錄 → mongodb → bin」:

[~] $ cd ~/mongodb/bin/       // 切換到 mongodb 目錄

~/ 是「從 ~ 目錄開始」,不管你位在哪一個資料夾,只要加了 ~/ 就會從預設家目錄開始算。

啟動資料夾伺服器

接著,執行以下指令:

[~/mongodb/bin] $ ./mongod –dbpath /Users/[你的使用者名稱]/mongodb-data

這行指令要求電腦「執行 mongod 程式來啟動資料庫,並且要帶入位於 mongodb-data 的資料」。

有部分同學可能在第一次執行指令時,會收到 Mac 的警告訊息,告訴你這是「未識別的開發者」,因為 Apple 阻擋了不是經由 Apple Store 上架的 app,這時候需要去「安全性與隱私權」裡進行設定。設定步驟可參考這裡

先解釋一下 Linux 指令的基本結構:

mongodb linux 指令基本結構

mongod 這個指令主要是幫忙啟動 MongoDB 伺服器,而啟動的時候需要透過 –dbpath 告訴 MongoDB 資料存放的位置,也就是 mongodb-data,這裡必須提供完整路徑,也就是 /Users/[你的使用者名稱]/mongodb-data。

第一個關鍵字 mongodb 對應到了 mongodb/bin 目錄下的同名執行檔,前面加了 ./ 是指「同一層資料夾」的意思,這裡需要寫出來:

mongodb執行檔

(編註:助教在影片示範時沒有加 ./,是因為助教的電腦有做其他額外處理,請同學特別注意,別忘記加 ./ 唷。)

執行完這些指令,你會看到與以下類似的畫面,這就是資料庫啟動的樣子:

資料庫啟動畫面

系統訊息可能會讓你覺得眼花繚亂,如果在其中找到一行 waiting for connections on port 27017,就代表你的 MongoDB 資料庫已經在運作了,這句話的白話意思是「資料庫伺服器正在 27017 號埠口等待連線」,埠 (port) 可以想像成一個服務櫃台,總之這裡的意思是資料庫已經啟動了!

恭喜你成功啟動資料庫!

延伸:常用的 MongoDB 工具:

1. MongoDB Compass:MongoDB Compass 是一個官方提供的圖形化用戶界面,可以讓開發者輕鬆地管理和操作 MongoDB 數據庫。它提供了可視化的數據庫管理和查詢功能,支援 Windows、Mac 和 Linux 等操作系統。

2. Robo 3T:Robo 3T 是一個免費的 MongoDB 客戶端,可以讓開發者輕鬆地管理和操作 MongoDB 數據庫。它提供了可視化的數據庫管理和查詢功能,同時也支援導入和導出數據等功能。

3. MongoDB Atlas:MongoDB Atlas 是一個 MongoDB 的雲端服務平台,可以讓開發者輕鬆地在雲端搭建和管理 MongoDB 數據庫。它提供了高可用性、可擴展性和安全性等功能,同時也支援自動擴容、備份和還原等功能。

想做數據分析或轉職數據分析師?你可以先準備好必備的「數據思維」