---
# System prepended metadata

title: MongoDB 安裝注意事項
tags: [全端]

---

:::info
- 在 [官方的下載位置](https://www.mongodb.com/docs/manual/installation/) 有提供不同作業系統的下載說明，請先根據你的作業系統選擇後閱讀。
- 配置好後可以閱讀[ w3schools](https://www.w3schools.com/nodejs/nodejs_mongodb.asp) 的教學，真心推薦
:::

# Windows 系統

當你正開心地要下載 `MongoDB` 來玩玩，看完 [官方的下載說明](https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-windows/) 後，如果發現「我下載完了，然後呢？」，那肯定是因為你沒有一些先備知識。
>加上官方在後半部的描述有點怪怪的：(

:::warning
如果下載時遇到需要以工作管理員執行，但是右鍵點下去卻沒有選項可以選的情況，請先開一個管理員權限的終端機，輸入：
```shell
> msiexec /i <path/to/mongodownload.msi>
```
:::

## 結構

這邊先說明下載完後的檔案結構，預設情況長怎樣：

### `MongoDB`

```
MongoDB
└── Server
    └── x.x // 你下載的版本
        ├── LICENSE-Community.txt
        ├── MPL-2
        ├── README
        ├── THIRD-PARTY-NOTICES
        ├── sbom_from_silk.json
        ├── bin
        |   ├── Install-Compass.ps1
        |   ├── mongod.exe
        |   ├── mongod.pdb
        |   ├── mongos.exe
        |   ├── mongos.pdb
        |   └── mongod.cfg
        ├── data
        └── log
            └── mongod.log
```

- `bin` 裡面放我們主要使用的 `mongod.exe` ，所以建議把 `bin` 這個資料夾的路徑放到環境變數，這樣可以方便的使用 `mongod.exe`，[官方教學也有提到](https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-windows/#add-mongodb-binaries-to-the-system-path)。
- `mongod.cfg` 是執行 `mongod.exe` 時會讀取的各種設置
    - 像是設定要開在哪個 host 跟 port
    - 或是 log 要輸出在哪裡等等
- `data` 跟 `log` 是==作為 windows service 安裝==時才會自動幫你建立的兩個資料夾
    - 也有提供預設路徑。
    - 沒有勾選==作為 windows service 安裝==的話就只有 `bin`

![image](https://hackmd.io/_uploads/HJU_xQj2R.png)

### `Mongosh`

```
Mongosh
├── .sbom.json
├── LICENSE-crypt-library
├── LICENSE-mongosh
├── README
├── THIRD_PARTY_NOTICES
├── mongosh.exe
└── mongosh_crypt_v1.dll
```

- `mongosh.exe` 就是用來連上 `mongod.exe` 所啟動的資料庫時所使用的 bash，所以也建議把這個資料夾路徑放到環境變數

# Windows Service

相信讀者在閱讀的過程中可以看到官方有多次提及這個酷東西，作者我也是這次查了才知道原來 windows 有這個酷東西。

簡單來說這個東西就是讓某些程式可以開機後當成背景程式持續運作著。

:::info
有興趣的人請 Google ==How to open Windows Services==。
:::

這時回到官方的說明文件，官方在你下載完 `Mongosh` 後 ([這個章節之後](https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-windows/#install-mongosh)) 分成兩個情況，==有沒有安裝 MongoDB 作為 Windows Service==。

## Installed MongoDB as a Windows Service

如果有作為 Windows Service 安裝的話，那麼恭喜你，可以直接使用 `Mongosh.exe` 跟連上資料庫。原因是因為 `Mongod.exe` 已經作為一個背景服務持續的執行著了，只要知道開在哪個 host 跟 port 位置，`Mongosh.exe` 就可以透過該位置連上去。
>預設是 `127.0.0.1:27017`
:::info
這樣的好處是，對於專門用來當資料庫的主機上，裝好後只要是開機狀態，就代表資料庫也開啟了，不用手動開啟資料庫。
:::

想要調整一些跟資料庫有關的東西，就要先透過 ==Windows Service Console== 關掉 MondoDB 的 Windows 服務，調整好屬於你的 `mongod.cfg` 後，再透過 ==Windows Service Console== 開啟 MondoDB 的 Windows 服務。

==Windows Service Console==是什麼？你在 windows 搜尋 ==服務== 會跑出一個像齒輪的東西：

![image](https://hackmd.io/_uploads/Hk3GT7sh0.png)

點開他後，翻一下，你會找到 MongoDB 的 Windows Service：

![image](https://hackmd.io/_uploads/S1NgpmsnR.png)


上面的這個流程，就是 [這個章節](https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-windows/#if-you-installed-mongodb-as-a-windows-service)的內容，然後他又指向 [這個章節](https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-windows/#run-mongodb-community-edition-as-a-windows-service) ，但是如果讀者不知道 Windows Service 是個什麼，加上該章節的排版很奇怪 (為啥章節的最後才接著 3 個子章節，說明如何 Start, Stop 跟 Remove MongoDB 的 Windows Service，但是也沒說這三個功能要用來幹嘛)，看完之後只會一臉矇：(

##  Did Not Install MongoDB as a Windows Service

根據 [這個章節所述](https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-windows/#if-you-did-not-install-mongodb-as-a-windows-service)，必須要手動開啟一個 `MongoDB` 的 Instance；白話來說就是要手動用終端機執行 `mongod.exe`。

該章節會導向 [這個章節](https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-windows/#run-mongodb-community-edition-from-the-command-interpreter)，這個章節就正常多了：)

然後官方有特別要求一定要用管理員模式執行該終端機，以免遇到權限問題。

:::info
- 雖然官方在第二步驟是給 `"C:\Program Files\MongoDB\Server\7.0\bin\mongod.exe" --dbpath="c:\data\db"`，透過指令內代入執行時需要的參數
    - 但是缺點是參數越多，你的指令越長、越醜：(
    - 所以我比較喜歡的做法是先寫好客製化的 `mongod.cfg`
    - 之後只要執行時代入 `--config <your/config/path>`
    - config 可以帶哪些參數請參見 [Self-Managed Configuration File Options 這篇](https://www.mongodb.com/docs/manual/reference/configuration-options/)
- 雖然第 2 步官方說終端機會顯示 `[initandlisten] waiting for connections`
    - 但是我不管怎麼樣都沒有看到這一行，連 log 裡面也沒有：)
:::

會需要採用這種手動的方式，主要是用於：

- 需要一台電腦同時執行多個 MongoDB 的時候，你就可以為各個資料庫配置客製化的 config 檔跟 host / port
- 或是單純需要頻繁做測試的時候，把 config 檔放在你的測試資料夾下，順便指定 log 跟 data 也都在附近的地方，再開一個 VSCode 一整個就近管理，真香。

---

# Linux 系統

:::danger
施工中
:::