iT邦幫忙

2025 iThome 鐵人賽

DAY 16
0
Modern Web

現在就學Node.js系列 第 16

MongoDB 基礎與連接 - Day16

  • 分享至 

  • xImage
  •  

在開發應用程式時,光靠程式記憶體是無法保存資料的,一旦伺服器重啟,資料就會消失。

因此我們需要 資料庫 (Database),讓資料能 持久化保存,例如:

  • 使用者帳號與登入資訊
  • 電商的訂單與商品
  • 留言板或聊天訊息

在眾多資料庫中,MongoDB 是最受歡迎的 NoSQL(非關聯式資料庫) 之一。

MongoDB 常用於搭配 Node.js ,非常適合做 RESTful API、使用者登入系統、即時服務 等應用。

關聯式 vs 非關聯式資料庫

在學 MongoDB 之前,先來理解它和傳統關聯式資料庫 (SQL) 的差異。

關聯式資料庫 (SQL)

代表:MySQL、PostgreSQL、SQL Server、Oracle

  • 結構:資料以 表格 (Table) 儲存
  • 關聯:透過 外鍵 (Foreign Key) 連結多張表
  • Schema 嚴格:每張表的欄位與型別必須事先定義
  • 查詢:使用 SQL 語法

範例 SQL 查詢:

SELECT users.name, orders.item
FROM users
JOIN orders ON users.id = orders.user_id;

👉 適合:需要嚴格一致性與高結構性的系統,例如金融、ERP、電商。

非關聯式資料庫 (NoSQL)

代表:MongoDB、Redis、Cassandra、DynamoDB

  • 結構:資料以 文件 (Document)鍵值對 (Key-Value) 等形式存放
  • 關聯:通常用「嵌套 (Embed)」取代 JOIN
  • Schema 彈性:欄位可以自由增減,不需要事先定義
  • 查詢:使用 專屬 API(MongoDB 使用 JSON 類似的查詢語法)

MongoDB 文件範例:

{
  "name": "Howard",
  "orders": [
    { "item": "Laptop", "price": 30000 },
    { "item": "Mouse", "price": 500 }
  ]
}

👉 適合:高併發、快速迭代、即時應用(聊天、IoT、大數據分析)。

差異整理表

  • SQL 像 Excel 表格 → 資料必須整齊一致。
  • NoSQL 像 JSON 文件集合 → 每份文件可以長得不一樣。
特性 關聯式 (SQL) 非關聯式 (NoSQL)
資料結構 表格 (Table) 文件 (Document) / Key-Value
Schema 嚴格固定 彈性,可隨時改變
關聯性 外鍵 JOIN 嵌套或手動關聯
查詢語言 SQL API (如 MongoDB 查詢語法)
適合場景 金融、ERP、電商 即時應用、大數據、彈性開發
擴展性 垂直擴展 (Scale-up) 水平擴展 (Scale-out)

MongoDB 安裝與連接

1. 安裝 MongoDB

  • 官網下載:MongoDB Community Server
  • 安裝後會得到:
    • mongod → MongoDB 伺服器
    • mongo → Mongo Shell (CLI 工具)

2. 安裝 MongoDB Compass

  • MongoDB 官方提供的 GUI 工具
  • 可以用點選的方式管理資料,就像 MySQL 的 phpMyAdmin
  • 適合初學者快速查看資料庫與集合內容

3. Node.js 連接 MongoDB

安裝官方驅動:

npm install mongodb

建立 index.js 測試程式:

import { MongoClient } from "mongodb";

const url = "mongodb://localhost:27017"; // 與 Compass 相同
const client = new MongoClient(url);

export async function connectDB() {
  try {
    await client.connect() // 1) 連線
    console.log('✅ 已連接 MongoDB')

    const db = client.db('testdb') // 2) 指定資料庫
    const users = db.collection('users') // 3) 指定集合(類似資料表)

    // 4) 新增資料
    await users.insertOne({name: 'Howard', age: 30, createdAt: new Date()})

    // 5) 查詢資料
    const data = await users.find().toArray()
    console.log('📌 資料:', data)
  } catch (err) {
    console.error('❌ 連接或操作失敗:', err)
  } finally {
    await client.close() // 6) 關閉連線
  }
}

connectDB()

在 Compass 查看資料

  1. 打開 MongoDB Compass

  2. 在「連線字串」輸入與程式相同的 URI:

    mongodb://localhost:27017
    
  3. 按下 Connect 連線到本機資料庫

  4. 在左側清單找到 testdb → 點進去 users

  5. 就能看到剛剛程式插入的 { name: "Howard", age: 30 } 🎉

小結

今天我們完成了 MongoDB 的入門:

  1. 了解 SQL 與 NoSQL 的差異
  2. 安裝 MongoDB 與 Compass
  3. Node.js 官方驅動 連線並進行 CRUD(新增、查詢)
  4. 學會如何在 Compass 中查看程式插入的資料

參考資料:

Learn MongoDB in 1 hour 🍃


上一篇
Express.js MVC 架構
下一篇
MongoDB 之 CRUD 操作 — Create、Read、Update、Delete - Day17
系列文
現在就學Node.js17
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言