MongoDB 教學:NoSQL 數據庫的入門指南

你好,有抱負的數據庫愛好者!我很興奮能成為你進入 MongoDB 世界的導遊。作為一個教了超過十年計算機科學的老師,我看過無數學生在掌握 NoSQL 數據庫的力量時眼睛發亮。那麼,我們一起來認識 MongoDB,讓它成為你的新好朋友吧!

MongoDB - Home

MongoDB 是什麼?

MongoDB 是一個流行的 NoSQL 數據庫,它以靈活的、類似 JSON 的文檔形式存儲數據。但等等,什麼是 NoSQL 呢?想像你正在整理衣櫥。傳統的 SQL 數據庫就像有固定抽屜的櫥櫃 - 每樣東西都有它固定的位置,但不是很靈活。而 NoSQL 數據庫則像是一堆你可以隨意堆疊和排列的盒子。這就是 MongoDB!

MongoDB 的關鍵特點

  1. 文檔導向的存儲
  2. 高性能
  3. 高可用性
  4. 易於擴展 5.豐富的查詢語言

MongoDB 入門

安裝

首先,我們來將 MongoDB 安裝在你的電腦上。前往 MongoDB 官方網站,下載適合你操作系統的社區伺服器版本。安裝完畢後,你需要啟動 MongoDB 服務。

在 Windows 上,你可以將其作為服務啟動。在 macOS 或 Linux 上,你可以使用以下命令:

sudo service mongod start

連接到 MongoDB

現在,我們已經讓 MongoDB 運行起來了,來連接到它。我們將在這個教學中使用 MongoDB Shell。打開你的終端並輸入:

mongo

你應該會看到一個歡迎信息和提示。恭喜!你現在已經連接到 MongoDB 了。

MongoDB 的基本操作

讓我們從 MongoDB 的基本操作開始。我們稱這些為 CRUD 操作:創建(Create)、讀取(Read)、更新(Update)和刪除(Delete)。將這些視為數據庫操作的四個基本食物群!

創建文檔

在 MongoDB 中,我們將文檔插入集合中。集合在 SQL 數據庫中就像是一個表,但更靈活。讓我們創建一個名為 "students" 的集合並插入一個文檔:

db.students.insertOne({
name: "John Doe",
age: 20,
major: "Computer Science",
grades: [85, 90, 92]
})

這在 "students" 集合中創建了一個新的文檔。注意我們如何輕鬆地將數組(grades)包含在我們的文檔中?這就是 MongoDB 的靈活性!

讀取文檔

要檢索文檔,我們使用 find() 方法。讓我們找到所有主修計算機科學的學生:

db.students.find({ major: "Computer Science" })

這將返回所有主修字段為 "Computer Science" 的文檔。

更新文檔

需要改變某個東西嗎?使用 updateOne()updateMany()。讓我們將 John 的年齡增加:

db.students.updateOne(
{ name: "John Doe" },
{ $set: { age: 21 } }
)

$set 運算符指定了要更新的字段。如果字段不存在,它將被創建。

刪除文檔

要刪除文檔,使用 deleteOne()deleteMany()。讓我們刪除所有年齡小於 18 歲的學生:

db.students.deleteMany({ age: { $lt: 18 } })

$lt 運算符表示 "小於"。MongoDB 提供了一套豐富的運算符來支持複雜的查詢。

高級查詢

MongoDB 的查詢語言強大且靈活。讓我們看看一些更高级的查詢。

查詢運算符

MongoDB 提供了各種運算符來支持複雜的查詢。以下是一些常見的運算符:

運算符 描述 示例
$eq 匹配等於指定值的值 { age: { $eq: 20 } }
$gt 匹配大於指定值的值 { age: { $gt: 20 } }
$lt 匹配小於指定值的值 { age: { $lt: 20 } }
$in 匹配数组中指定的任何值 { age: { $in: [20, 21, 22] } }
$and 用邏輯 AND 連接查詢子句 { $and: [ { age: { $gt: 20 } }, { major: "Computer Science" } ] }
$or 用邏輯 OR 連接查詢子句 { $or: [ { age: { $lt: 20 } }, { major: "Physics" } ] }

聚合管道

聚合管道是一個強大的工具,用於數據分析。它允許你處理數據並返回計算結果。以下是一個簡單的例子:

db.students.aggregate([
{ $match: { major: "Computer Science" } },
{ $group: { _id: null, averageAge: { $avg: "$age" } } }
])

這個管道首先匹配所有主修計算機科學的學生,然後計算他們的平均年齡。

MongoDB 中的索引

在任何數據庫系統中,索引對性能都至關重要。在 MongoDB 中,你可以創建索引來支持你的查詢並提高讀操作的性能。以下是如何創建一個簡單索引的方法:

db.students.createIndex({ name: 1 })

這在 "name" 字段上創建了一個升序索引。現在,搜索名字的查詢會更快!

結論

恭喜你!你已經邁出了進入 MongoDB 世界的第一步。我們介紹了 CRUD 操作的基本知識,探索了一些高级查詢,甚至還涉獵了索引。記住,掌握 MongoDB(或任何技術)的關鍵是實踐。不要害怕嘗試和犯錯誤 - 我們就是這樣學習的!

在你繼續你的旅程時,你會發現 MongoDB 更多強大的功能,如為高可用性而設計的副本,為水平擴展而設計的分片,以及用於複雜數據處理的聚合框架。NoSQL 數據庫的世界是廣闊和令人興奮的,而你现在已經準備好去進一步探索它了。

快樂編程,願你的文檔總是結構良好,你的查詢總是迅雷不及掩耳!

Credits: Image by storyset