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 的優點與缺點
優點:
- 靈活性:MongoDB 不需要固定的數據模式,這使得處理不同類型和形態的數據變得更容易。
- 擴展性:MongoDB 支持水平擴展,這意味著您可以透過增加更多的機器來處理更大的數據負載。
- 性能:由於 MongoDB 使用內部存儲的數據格式(BSON),這可以加快查詢速度。
缺點:
- 資料安全性:MongoDB 對於數據的完整性和一致性的支援較弱,這可能使其在需要進行精確計算的應用中不是理想選擇。
- 記憶體使用:MongoDB 的索引需要大量的記憶體,並且 MongoDB 需要為每個存活的連線分配獨立的線程和記憶體。
MongoDB 的應用場景
由於 MongoDB 的靈活性和可擴展性,它被用在許多不同的情況下,包括:
- 實時分析:MongoDB 可以用於處理大量即時數據,使其成為實時分析的理想選擇。
- 內容管理系統:MongoDB 的彈性模式使其適合用於動態、無結構化的數據,這種數據在內容管理系統中非常常見。
- 移動應用:MongoDB 能夠處理大量的低延遲查詢,這使得它適合於服務大量的移動應用用戶。
Mongoose
Mongoose 是提供給 Node.js 使用的 MongoDB ODM。
透過 Mongoose,我們可以用物件導向語法,以更直覺的方式操作 MongoDB 資料庫。
資料庫綱要
Schema 是「資料庫綱要」,這份綱要定義一組資料的組成結構,包括資料的名稱、屬性、資料型別等。與此同時,schema 也會定義資料之間的關聯性以及其限制。
你需要把資料設計的結構,登錄到這份文件裡,然後資料庫會按照在 schema 定義的內容去產生資料表。
文件資料庫由於使用了彈性較高的 JSON 結構,所以其實可以不需要 schema(因此稱為 “schema-less”)。但因為絕大部分應用程式的資料結構都是固定的,所以 Mongoose 還會是讓開發者定義 schema,讓我們能使用它的內建功能去處理與驗證資料。
安裝 MongoDB
架設專案環境的第一步,從資料庫的建置開始,也就是安裝 MongoDB,並且啟動 MongoDB 伺服器。
下載 MongoDB 社群版伺服器
官網下載
首先我們要到 MongoDB 官網下載服務,注意 MongoDB 官網以商業版服務 (Atlas) 的介紹為主,而我們現在要使用的是免費開源的社群版服務 (Community Server)。
請到 MongoDB Community Server 的下載中心 (download center):https://www.mongodb.com/download-center/community。
教案中使用的 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/bin/
注意上圖,在 mongodb 目錄下有一個叫 bin 的資料夾,這個資料夾裡面存放了 MongoDB 的主要執行檔,裡面有一支叫 mongod 的執行檔,這個執行檔專門用來啟動資料庫,等下我們會用終端機指令來呼叫這個執行檔。
啟動 MongoDB 伺服器
現在,請打開你的終端機,我們現在要透過指令來啟動 mongodb/bin 資料夾下的 mongod執行檔,啟動資料庫的伺服器(可以想像成是一個「電腦開機」的概念)。
找到正確的目錄
在終端機裡,切換資料夾的指令是 cd,在指令後空一格加入路徑。而剛才我們把 mongodb 資料夾存在使用者預設目錄裡,預設目錄的代號是 ~,可以寫成這樣:
cd ~
請你切換過去試試看,你還可以更進一步用 ls 把目錄清單列出來,和圖形介面對照看看,確認 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 指令的基本結構:
mongod 這個指令主要是幫忙啟動 MongoDB 伺服器,而啟動的時候需要透過 –dbpath 告訴 MongoDB 資料存放的位置,也就是 mongodb-data,這裡必須提供完整路徑,也就是 /Users/[你的使用者名稱]/mongodb-data。
第一個關鍵字 mongodb 對應到了 mongodb/bin 目錄下的同名執行檔,前面加了 ./ 是指「同一層資料夾」的意思,這裡需要寫出來:
(編註:助教在影片示範時沒有加 ./,是因為助教的電腦有做其他額外處理,請同學特別注意,別忘記加 ./ 唷。)
執行完這些指令,你會看到與以下類似的畫面,這就是資料庫啟動的樣子:
系統訊息可能會讓你覺得眼花繚亂,如果在其中找到一行 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 數據庫。它提供了高可用性、可擴展性和安全性等功能,同時也支援自動擴容、備份和還原等功能。
想做數據分析或轉職數據分析師?你可以先準備好必備的「數據思維」