Johnson Mao

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內輸入設定

    複製成功!
    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(查詢條件) 刪除符合條件的第一筆資料

#參考資料

回首頁