在 ServBay 中安裝與管理 MongoDB 資料庫
MongoDB 是領先的 NoSQL 文件型資料庫,以靈活度、強大查詢功能和橫向擴展著稱,被廣泛用於現代應用開發。ServBay 為 macOS 開發者提供前所未有的整合式環境,大幅簡化多版本 MongoDB 的安裝、設定與管理流程,並內建全套核心指令列工具,為你打造一個完整高效的本地開發與測試工作站。
概覽:為什麼在 ServBay 使用 MongoDB?
ServBay 不僅是啟動器,更是完整的開發環境管理器。對於 MongoDB,這表示:
- 多版本共存與切換: 你可一鍵安裝並執行多個 MongoDB 版本(如 5.0、6.0、7.0 等),並依專案需求輕鬆切換,無須擔心環境衝突。
- 圖形化設定: 告別繁瑣的設定檔編輯,在 ServBay 的圖形界面下直覺調整 MongoDB 的埠號、IP、資料目錄等核心參數。
- 整合工具鏈: ServBay 自動管理並集成官方 MongoDB Shell (
mongosh
) 和 MongoDB Database Tools,讓你隨裝即用mongostat
、mongotop
、mongodump
與mongorestore
等關鍵工具。
本指南將帶你從入門到精通,逐步說明安裝、設定、互動式管理、即時效能監控,以及資料備份還原的各大重點環節。
1. 安裝與設定 MongoDB 服務
步驟 1:安裝 MongoDB 套件
在 ServBay 內安裝 MongoDB 服務是首要步驟。
開啟 ServBay 應用。
於左側導航點選 套件 (Packages)。
在套件列表中,下拉至
Databases
分類,找到MongoDB
。選擇專案所需的 MongoDB 版本(如
MongoDB 7.0
),按右側安裝按鈕。ServBay 會自動下載並完成安裝。
步驟 2:細緻化設定 MongoDB 服務
安裝完成後即可詳細設定 MongoDB 服務。
於左側導航點擊 Databases -> MongoDB -> 你剛安裝的版本(如
MongoDB 7.0
)。在此畫面可自訂以下核心設定項目:
- Bind IP (綁定 IP): MongoDB 服務偵聽網路請求的 IP。預設
127.0.0.1, ::1
為本地開發中最安全配置,僅允許本機應用連線資料庫。 - Bind Port (綁定埠號): 資料庫連線埠。預設為 MongoDB 標準埠
27017
,除非有需要,一般建議維持此設定。 - Socket: Unix socket 檔案路徑。對本機連線來說,使用 socket 較 TCP/IP 更高效,因為省略網路層開銷。
- Data dir (資料目錄): 存放所有資料庫檔案(含 collection、index 等)的本地磁碟路徑。ServBay 會自動給出合理預設值,你可以點右側資料夾圖示在 Finder 直接定位此目錄。
- Additional Parameters (附加參數): 進階設定區。可輸入其他啟動參數,例如啟用存取控制時加入
--auth
。
- Bind IP (綁定 IP): MongoDB 服務偵聽網路請求的 IP。預設
步驟 3:啟動 MongoDB 服務
- 完成設定後,務必點選右下角 Save (儲存) 按鈕。
- 回到 套件 (Packages) 頁面,找到你剛設定的 MongoDB 版本,將右側灰色開關點擊啟動。
- 當開關變綠、狀態燈亮起,代表你的 MongoDB 實例已順利運行並可接受連線。
2. 互動式管理:精通 MongoDB Shell (mongosh
)
mongosh
是 MongoDB 官方所推薦的現代命令列介面,支援語法高亮、智慧補全、指令記錄與進階腳本能力,是與資料庫互動的首選利器。
安裝 MongoDB Shell
ServBay 以獨立套件方式提供 mongosh
,可按需求安裝。
- 在 套件 (Packages) 頁面找到
MongoDB Shell
。 - 點右側安裝按鈕。安裝後,
mongosh
指令將於 ServBay 管理的終端環境中全域有效。
如何使用 mongosh
可於任何支援 ServBay 環境的終端(如 macOS 內建終端或 iTerm2)直接使用 mongosh
。
基本連線: 開啟終端,輸入以下最簡指令連線本地 Port
27017
的 MongoDB 實例:bashmongosh
1亦可使用完整明確的連線字串:
bashmongosh "mongodb://127.0.0.1:27017"
1豐富互動範例(CRUD 實作): 連線成功後,即進入功能強大的互動式 JavaScript 環境。我們用一個完整例子體驗:
第1步:選擇或建立資料庫
javascript// 這行指令會切換到 servbay-demo 資料庫;若不存在則於首次寫入自動建立 use servbay-demo
1
2第2步:建立集合並插入資料(Create)
javascript// 插入單一用戶文件 db.users.insertOne({ _id: 1, name: "Alice", email: "alice@servbay.demo", age: 30, tags: ["developer", "php", "backend"], joined_date: new Date("2023-01-15") }) // 批量插入多位用戶,方便後續查詢 db.users.insertMany([ { _id: 2, name: "Bob", email: "bob@servbay.demo", age: 25, tags: ["designer", "ui", "frontend"] }, { _id: 3, name: "Charlie", email: "charlie@servbay.demo", age: 35, tags: ["developer", "python", "data"] }, { _id: 4, name: "Diana", email: "diana@servbay.demo", age: 29, tags: ["developer", "nodejs", "backend"] } ])
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16第3步:查詢資料(Read)
javascript// 查詢集合中所有文件,並以 .pretty() 美觀輸出 db.users.find().pretty() // 條件查詢:找到所有年齡大於 28 歲的 developer db.users.find({ age: { $gt: 28 }, tags: "developer" }) // 指定欄位回傳:只輸出姓名與 email db.users.find({}, { name: 1, email: 1, _id: 0 })
1
2
3
4
5
6
7
8第4步:更新資料(Update)
javascript// 更新單一文件:為 Alice 增加 'lead' 標籤並更新年齡 db.users.updateOne( { name: "Alice" }, { $set: { age: 31 }, $addToSet: { tags: "lead" } } // $addToSet 保證標籤不重複 ) // 批次更新:為所有 'backend' 開發者新增 'active' 狀態 db.users.updateMany( { tags: "backend" }, { $set: { status: "active" } } )
1
2
3
4
5
6
7
8
9
10
11第5步:刪除資料(Delete)
javascript// 刪除一筆文件 db.users.deleteOne({ name: "Bob" }) // 驗證刪除結果 db.users.find({ name: "Bob" }).count() // 預期回傳 0
1
2
3
4
5
3. 即時監控與管理:掌握 MongoDB 資料庫工具
ServBay 同樣內整 MongoDB Database Tools
套件,包括 mongostat
、mongotop
、mongodump
及 mongorestore
,是進行進階管理與維運的關鍵利器。
安裝 MongoDB Database Tools
- 於 套件 (Packages) 頁面找到
MongoDB Database Tools
。 - 按右側安裝按鈕。
3.1 使用 mongostat
即時監控實例狀態
mongostat
猶如 MongoDB 的「心電圖」,能高頻快照呈現資料庫核心指標,是診斷效能瓶頸與觀察負載的首選工具。
基本用法: 開新終端,執行下列指令,每秒刷新一次數據:
bashmongostat
1會看到類似下方輸出範例,每行為一個時間點快照:
insert query update delete getmore command dirty used flushes vsize res qrw arw net_in net_out conn time *0 *0 *0 *0 0 1|0 0.0% 23.2% 0 1.29G 84.0M 0|0 1|0 103b 501b 4 Nov 26 15:30:00.001 *0 *0 *0 *0 0 1|0 0.0% 23.2% 0 1.29G 84.0M 0|0 1|0 71b 501b 4 Nov 26 15:30:01.001
1
2
3各欄說明:
insert
,query
,update
,delete
:每秒對應操作次數。dirty
:暫存區「髒」數據(已修改未寫入磁碟)百分比。used
:儲存引擎暫存區使用率。vsize
,res
:虛擬記憶體與常駐記憶體使用量。qrw
,arw
:等待读/寫用戶端數。net_in
,net_out
:網路輸入、輸出流量。conn
:目前連線數。
實戰:監控高併發寫入負載
- 開啟新終端(終端A),進入
mongosh
,執行模擬日誌寫入腳本:javascript// 在 mongosh 中執行 use log_system print("Starting high-frequency log insertion...") while (true) { db.app_logs.insertOne({ level: "INFO", message: "User activity detected.", timestamp: new Date() }); sleep(50); // 每 50 毫秒寫一次(每秒 20 次) }
1
2
3
4
5
6
7 - 再開一終端(終端B),執行
mongostat
,每 2 秒彙總:bashmongostat 2
1 - 觀察終端B輸出,會見到
insert
欄位數值約*40
(每秒 20 次 x 2 秒刷新),清楚顯示目前負載主力為寫入。
- 開啟新終端(終端A),進入
3.2 使用 mongotop
追蹤集合讀寫耗時
如果 mongostat
告知「資料庫很忙」,mongotop
則直接指向「誰在讓資料庫忙」——可依 collection 追蹤讀寫時耗,快速找出效能熱點。
基本用法: 終端執行
mongotop
,預設每秒刷新一次。bashmongotop
1輸出範例:
ns total read write time local.oplog.rs 1101ms 155ms 946ms Nov 26 15:35:00.000 servbay-app.sessions 210ms 1ms 209ms Nov 26 15:35:00.000 servbay-app.articles 15ms 15ms 0ms Nov 26 15:35:00.000
1
2
3
4欄位說明:
ns
:命名空間(資料庫.集合
)。total
:該集合讀寫操作總時長。read
:讀取耗時。write
:寫入耗時。
實戰:識別熱門集合
- 於終端A(
mongosh
),模擬一個頻繁更新用戶 session 並偶爾查詢文章的應用:javascript// 在 mongosh 執行 use servbay_app print("Simulating application load...") // 頻繁更新 session setInterval(() => { db.sessions.updateOne({ sid: "session_abc" }, { $set: { data: Math.random() } }, { upsert: true }); }, 50); // 每 50ms 更新一次 // 偶爾查詢文章 setInterval(() => { db.articles.find({ tags: "featured" }).limit(5).toArray(); }, 500); // 每 500ms 查詢一次
1
2
3
4
5
6
7
8
9
10
11
12 - 於終端B,執行
mongotop
,調整刷新間隔為 5 秒,觀察數據較穩定:bashmongotop 5
1 - 檢視終端B輸出,會明顯見到
servbay_app.sessions
的write
及total
時間很高,servbay_app.articles
則read
時間相對較低,立刻判斷出 application 熱點在於 session 的頻繁寫入,值得思考調整管理策略。
- 於終端A(
3.3 使用 mongodump
進行資料備份
mongodump
是專業級備份工具,可將 MongoDB 資料導出為 BSON 格式備份。
- 備份單一資料庫:bash
mongodump --db servbay-demo --out /Applications/ServBay/backup/mongodb/servbay-demo-backup-$(date +%F)
1 - 備份單一集合:bash
mongodump --db servbay-demo --collection users --out /Applications/ServBay/backup/mongodb/users-backup
1 - 備份整個 MongoDB 實例(所有資料庫):bash
mongodump --out /Applications/ServBay/backup/mongodb/full-instance-backup
1
3.4 使用 mongorestore
進行資料還原
mongorestore
用來將 mongodump
產出的備份資料匯回 MongoDB。
- 還原單一資料庫:bash
# --drop 會先清空還原目標同名集合,確保乾淨還原 mongorestore --drop --db servbay-demo /Applications/ServBay/backup/mongodb/servbay-demo-backup-2023-11-26/servbay-demo/
1
2 - 從備份還原單一集合到新集合:bash
mongorestore --db servbay-demo --collection users_restored /Applications/ServBay/backup/mongodb/users-backup/users.bson
1
4. 連線圖形化管理工具(GUI)
除了命令列,你也能用任何主流 MongoDB 圖形管理工具串連並管理 ServBay 資料庫,對瀏覽資料與聚合 pipeline 構建特別便利。推薦 MongoDB Compass、TablePlus、或 Studio 3T。
連線時,請於 GUI 工具中設定下列資料:
- Host(主機):
127.0.0.1
- Port(埠號):
27017
- Authentication(驗證): 除非你於附加參數啟動了認證(
--auth
),並已建立用戶,否則此欄留空即可。
總結
ServBay 將 MongoDB 強大功能與 macOS 優雅體驗完美結合,為開發者打造無與倫比的本機開發環境。本指南不僅帶你快速啟動運行 MongoDB,更精通透過 mongosh
精細管理、用 mongostat
與 mongotop
專業級效能監控、以及用 mongodump
、mongorestore
實施可靠資料備份還原的技能。現在,你已能自信運用 MongoDB 驅動你的下個專案!