iT邦幫忙

2025 iThome 鐵人賽

DAY 19
0
Modern Web

現在就學Node.js系列 第 19

Mongoose 入門 — 更高效的 MongoDB 操作工具 - Day 19

  • 分享至 

  • xImage
  •  

昨天我們透過 MongoDB Driver 直接操作資料,雖然能完成 CRUD,但實務上卻有幾個痛點:

  1. 程式碼冗長
    • 每次都得 db.collection("users").find(...),程式缺乏結構,專案一大就會變得凌亂難維護。
  2. 沒有驗證
    • MongoDB 不會檢查資料格式,像 { name: 123 } 也能存進資料庫,長期下來資料品質難以保證。
  3. 缺少邏輯封裝
    • 例如「使用者 email 必須唯一」、「年齡必須大於 0」,如果分散在程式裡各處,容易出錯、難以統一管理。

為了解決這些問題,我們就需要 Mongoose

它是一個 ODM (Object Data Modeling) 工具,幫助我們更安全、更有結構地操作 MongoDB。

Mongoose 的核心價值

  • Schema 驗證 → 定義欄位型別、必填規則與格式限制,避免髒資料進入 DB。
  • Model 封裝 → 把資料集合包裝成物件,可以用更直觀的方式操作。
  • Hooks (鉤子) → 在新增/更新前後自動執行邏輯,例如加密密碼。
  • Plugins (插件) → 快速擴充功能,例如自動加入 createdAtupdatedAt 欄位。

⚙️ 基本使用流程

1. 安裝套件

npm install mongoose

2. 連接資料庫

import mongoose from "mongoose";

// 連線到 testdb
await mongoose.connect("mongodb://localhost:27017/testdb");
console.log("✅ 已連接 MongoDB with Mongoose");

3. 定義 Schema & Model

// 建立 Schema
const userSchema = new mongoose.Schema({
  name: { type: String, required: true },   // 必填欄位
  age: { type: Number, min: 0 },            // 年齡必須 ≥ 0
  email: { type: String, unique: true },    // 不能重複
  createdAt: { type: Date, default: Date.now } // 預設值
});

// 建立 Model (對應到 MongoDB 的 users 集合)
const User = mongoose.model("User", userSchema);

📝 CRUD with Mongoose

Create — 新增文件

const newUser = await User.create({
  name: "Alice",
  age: 25,
  email: "alice@example.com"
});
console.log("✅ 新增使用者:", newUser);

Read — 查詢文件

const allUsers = await User.find();           // 查詢全部
const Alice = await User.findOne({ name: "Alice" }); // 查詢單筆

Update — 更新文件

// 直接更新
await User.updateOne({ name: "Alice" }, { $set: { age: 26 } });

// OOP 方式更新
const alice = await User.findOne({ name: "Alice" });
alice.age = 27;
await alice.save();

Delete — 刪除文件

await User.deleteOne({ name: "Alice" });

為什麼選擇 Mongoose?

相較於 MongoDB Driver,Mongoose 提供:

  • 更乾淨的程式碼:CRUD 操作直觀,不需要到處寫 db.collection(...)
  • 內建驗證機制:確保資料型別正確,避免資料亂掉。
  • 商業邏輯集中化:透過 Schema、Hooks 統一管理規則。
  • 可擴充性:利用 Plugins 增加功能,減少重複程式碼。
  • 更好維護性:結構化設計,適合多人協作與長期專案。

Mongoose 幫助我們把「資料存取」標準化與結構化,讓開發者能專注在 業務邏輯 而不是資料操作細節。

小結

  • 直接操作 MongoDB Driver 雖然能完成 CRUD,但在大型專案會遇到維護困難與資料品質問題。
  • Mongoose 提供 Schema、Model、Hooks、Plugins,讓 MongoDB 更有結構、規範與可擴充性。
  • 今天我們完成了 Mongoose 的基本安裝、連線、Schema/Model 定義與 CRUD 操作

參考資料:

  1. 告別繁瑣的原生操作!用 Mongoose 優雅地征服 MongoDB 資料庫
  2. Mongoose 是什麼?資料操作三步驟從 MongoDB 到 API

上一篇
MongoDB + Express 打造 CRUD API - Day18
下一篇
Mongoose 驗證、Hooks、關聯 (Population) -Day 20
系列文
現在就學Node.js24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言