MongoDB

MongoDB

資料庫概念圖

前言

在製作自己的專案時,想讓專案更加完整,於是就開始想,既然前端畫面邏輯都自己開發了,現在網路上資源又那麼豐富,未來也有可能朝全端發展,何不自己架設後端 API,給自己串接,還能了解整個網頁的運作邏輯,於是開始自學了後端框架 Express 和資料庫 MongoDB,這裡將會記錄學習 MongoDB 的學習筆記。

介紹

資料庫

  • 關聯式資料庫(RDBMS)
    • 資料具有關聯性
    • 表格化、標準化
    • 如:MySQL
  • 非關聯式資料庫(Not only SQL)
    • 更加彈性化(不一定要使用 SQL)
    • 如:MongoDB
  • SQL 是什麼?
    • SQL 是結構化查詢語言
    • 所有的關聯式資料庫都是用 SQL
    • 會 SQL 就大致上能快速學會關聯式資料庫(每個資料庫還是有些微的不同)

MongoDB

  • 是快速開發 Web 而設計的資料庫
  • 極簡、靈活性高
  • 存取的是各式各樣的 BSON。
  • BSON 就是二進制的 JSON。
  • MongodDB 架構 可以有多個資料庫
    • database 為資料庫,存放多個集合
      • collection 集合,存放多個文件
        • document 文件,我們操作的部分

MongoDB 安裝 與 啟動

安裝 MongoDB

可以去官網依自己的作業系統下載。
建議安裝版本為偶數結尾(穩定版)。
官網下載網站

==注意==:安裝建議用使用預設的比較不容易出錯,自訂的話,路徑不能有中文。

設置環境變數

我這裡是安裝 Windows 的 MongoDB 5.0 版本

  1. 找到安裝 MongoDB 的資料夾,直到找到裡面的 bin 資料夾
    範例:C:\Program Files\MongoDB\Server\5.0\bin

  2. 開啟電腦的環境變數,對使用者變數裡面的 PATH 編輯,並把剛剛 bin 的路徑新增到 PATH 內(需注意不要動到裡面其他的路徑)
    以我 Windows 10 為例:
    打開我的電腦 > 開啟設定 > 開啟進階系統設定 > 系統內容進階 tag 內點環境變數 > 對 PATH 進行編輯

  3. 在 C:\ 根目錄新增 data 資料夾,裡面新增 db 資料夾。

  4. 開啟 CMD 輸入 Mongod 啟動服務器後縮小

  5. 再開啟另一個 CMD 輸入 Mongo 連接資料庫,連接成功 CMD 會出現 >

開機自動啟動服務器

  1. 在 MongoDB 版本那個資料夾新增mongod.cfg檔案
    如:C:\Program Files\MongoDB\Server\5.0新增mongod.cfg

  2. mongod.cfg內輸入設定

    1
    2
    3
    4
    5
    6
    7
    systemLog:
    destination: file
    path: c:\data\log\mongod.log # 這裡輸入 log 檔案
    storage:
    dbPath: c:\data\db # 這裡輸入資料要存的位置
    net:
    port: 27017 # 這裡輸入想要的 port 號
  3. 開啟系統管理員身分的 CMD 在 bin 資料夾 輸入 mongod.exe --config

  4. 資料存取位置 輸入 god.cfg --install

  5. 接著輸入 net start MongoDB 啟動服務器

圖形化工具安裝

除了使用 CMD 來操作 MongoDB 外,也有圖形化工具可以使用
下載圖形化工具網站

操作資料庫

使用 use <database> 新增並進入資料庫
如:use test

當你新增資料時,<collection>為你的集合名。
如:db.students.insert({ name: "毛毛", gender: "男"})
這時資料庫就會自動新增 students 這個集合,
這個集合裡面有個{ name: "毛毛", gender: "男"}的資料,
輸入show collection 就可以看到 students
輸入show dbs就可以看到資料庫名稱 test

想刪除集合,只要輸入db.students.drop()就會刪除集合。
想刪除當前所在的資料庫,只要輸入db.dropDatabase()

新增資料

db.<collection>.insert(資料)
可以新增 JSON 資料,一個資料傳物件,多個資料傳陣列。
新增後如果沒有自訂_id值的話,MongoDB 會自動生成 _id,確保每個資料都是唯一性。

db.<collection>.insertOne() 只能傳一個物件。
db.<collection>.insertMany() 只能傳一個陣列。

查詢資料

db.<collection>.find(條件)
可以傳物件,當作查詢集合的參考,返回陣列。
如:傳{}就會顯示所有資料

db.<collection>.findOne() 返回第一個查到的物件。
db.<collection>.find().count() 返回查詢的數量。(length()一樣)

如果想加入條件

假設想查詢 price > 100 的資料,條件加上 $gt
範例:db.<collection>.find({price: {$gt: 100} })
假設想查詢 price >= 100 的資料,條件加上 $gte
範例:db.<collection>.find({price: {$gte: 100} })
假設想查詢 price < 100 的資料,條件加上 $lt
範例:db.<collection>.find({price: {$lt: 100} })
假設想查詢 90 < price < 100 的資料,條件之間加上,
範例:db.<collection>.find({price: {$lt: 100, $gt: 90} })
假設想查詢前 10 筆資料,使用 limit(數量)
範例:db.<collection>.find().limit(10)
假設想查詢第 11 ~ 20 筆資料,使用 limit(數量)外,還要使用skip(跳過幾筆)
範例:db.<collection>.find().skip(10).limit(10)

更新資料

db.<collection>.update(查詢條件, 更新資料)
透過第一個參數查詢到第一筆資料,第二個參數默認情況下會直接取代原有資料。

修改資料

db.<collection>.update(查詢條件, { $set: {更新資料} })
第二個參數增加 $set 修改操作符,就可以合併資料,而不是取代。

db.<collection>.update(查詢條件, { $unset: {刪除資料} })
第二個參數改成 $unset 修改操作符,就可以把資料指定屬性刪除。

修改多筆資料

db.<collection>.updateMany()
update 默認情況只會修改一個資料,可以使用 updateMany 同時修改多筆資料。

db.<collection>.update(查詢條件, { $set: {更新資料} }, { multi: true })
透過傳入第三個參數{ multi: true },也可以同時修改多筆資料。

修改的資料是多層陣列或多層物件

如果資料裡面是陣列或物件,
想修改裡面的屬性就要把操作符換成 $push 或 $addToSet 新增 或 $pop 移除,
查詢條件支持用.搜尋,但要用引號包起來。

$push 與 $addToSet 的差別在於

  • $push 會直接添加。
  • $addToSet 如果資料內有一樣的資料不會添加,沒有則會添加。

刪除資料

db.<collection>.remove(查詢條件)
db.<collection>.deleteMany(查詢條件)
刪除符合條件的多筆資料

db.<collection>.remove(查詢條件, true)
db.<collection>.deleteOne(查詢條件)
刪除符合條件的第一筆資料

參考資料