To-Do Calendar - Day12 串接 MongoDB 資料庫
接下來要進行設定在 Spring Boot 專案中連接 MongoDB 資料庫的部分。
MongoDB 是什麼?
MongoDB 是面向文檔的開源資料庫,以 BSON 的形式儲存文件(BSON 是 JSON 的二進位制表現形式),是一種靈活、易於擴展、高效能的 NoSQL 資料庫,MongoDB 旨在為 web 應用提供可擴展的高性能數據存儲解決方案,它提供了可以跟 SQL 相比的 Query Language(查詢語言),由 C++ 語言編寫而成。MongoDB 從 4.0 開始支援多文檔交易(Transactions),這是 MongoDB 一個革命性的里程碑。
非關聯式資料庫(NoSQL)
非關聯式資料庫(NoSQL)的意思是「Not Only SQL」,指的是不限定為關聯式資料庫的資料庫管理系統,以混用關聯式資料庫和非關聯式資料庫來達到最佳的儲存效果。NoSQL 資料庫沒有 Schema 架構,也就是所謂的 Schema-Free,可自由定義資料文件(Document)的結構,以及自由新增欄位。
MongoDB與RDBMS的架構比對

MongoDB的基本概念
- Database
- MongoDB的單個實例 (mongod),可以容納多個獨立的資料庫,每一個都有自己的集合和權限。
- Collection
- 可包含多筆資料,類似 RDBMS 的表格。
- 集合沒有固定的結構 (schema-free),可以插入不同類型的資料。
- 當第一個文件插入時,集合就會自動被創建。
- Document
- 文件是一個鍵值(key-value)對,以JSON格式呈現,使用BSON格式儲存。
- _id 欄位為必要欄位,可自行定義其值,未定義則由 MongoDB 自行塞入一組 ObjectId。
- Field中的值可以為陣列、內嵌文件等屬性。
- MongoDB 的限制
- BSON document 的大小上限:每個 BSON document 的大小上限為 16MB(16 megabytes)
- 嵌入式文件巢狀結構的深度上限:BSON document 的巢狀結構上限為 100 層
- 文件欄位名稱的限制
- _id作為保留欄位,用作主鍵,其值必須唯一、不可變,可以是除了陣列之外的任何型別。
- 不可以$字元作為開頭。
- 不可包含點號字元。
- 不可以是 null 字串。
MongoDB的資料型態
在 MongoDB 裡所儲存的資料有以下幾種資料型態:
- int
- long
- string
- double
- decimal
- boolean
- date
- timestamp
- array
- null
- binData:此欄位儲存二進制的資料(binary data)
- objectId:MongoDB 文件主鍵
- object:相當於 embedded document,就是文件內的子文件
因為 MongoDB 之前已經下載過,下載教學可參考這篇,可以不裝 MongoDB 的圖形化管理工具,因為這篇開始會使用 IntelliJ 介面來管理資料庫的數據。
設定 IntelliJ 與資料庫連線
- 點右上方的 Database 標籤
- 點 + 按鈕 > Data Source > MongoDB
- 設定 MongoDB 資料庫的連線資訊
- 點 Download 讓 IntelliJ 去下載相對應的 Driver 檔案
- 測試連線成功後,就按下 ok
建立資料庫與集合
- 點 QL 按鈕叫出 MongoDB 的 console
- 建立資料庫(指定當前資料庫,若不存在則建立新資料庫)
- 語法:use <資料庫名稱>
use todoCalendar

- 建立 Collection
- 語法:db.createCollection(<集合名稱>)
db.createCollection("HabitTrackers")

後面依序將其他集合也建出來,資料庫相關的前置作業就先到這~