> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/on-premises/zh-tw/wei-hu/updating-mongodb.md).

# 更新 MongoDB

{% hint style="info" %}
Server CE/Server Pro 的任何新版本都會在其 [版本說明](https://docs.overleaf.com/on-premises/release-notes).
{% endhint %}

### 我應該更新 MongoDB 嗎？

你應該 **只** 在你計劃升級你的 Server CE/Server Pro 執行個體時，才考慮更新 MongoDB 版本。

如果你執行的 MongoDB 版本比目前（或目標）版本建議的版本更新，就不需要做任何變更。

{% hint style="warning" %}
絕對不應將 MongoDB 版本降級。
{% endhint %}

如果你遇到某個特定問題，且你認為可能與目前的 MongoDB 版本有關，歡迎 [提出問題](https://github.com/overleaf/overleaf/issues) 如果你是 Server CE 使用者，或如果你是 Server Pro 使用者，請聯絡 Overleaf 支援。

### 檢查你的 MongoDB 版本

打開 `mongo` shell 應該會立即顯示目前版本。

Overleaf Toolkit 使用者：

```bash
bin/docker-compose exec mongo mongod --version
db 版本 v5.0.24
建置資訊：{
    "version": "5.0.24",
    "gitVersion": "f034f0c51b3dffef4b8c9452d77ede9888f28f66",
    "openSSLVersion": "OpenSSL 1.1.1f  2020 年 3 月 31 日",
    "modules": [],
    "allocator": "tcmalloc",
    "environment": {
        "distmod": "ubuntu2004",
        "distarch": "x86_64",
        "target_arch": "x86_64"
    }
}
```

Docker Compose 使用者：

```bash
docker compose exec mongo mongod --version
db 版本 v5.0.24
建置資訊：{
    "version": "5.0.24",
    "gitVersion": "f034f0c51b3dffef4b8c9452d77ede9888f28f66",
    "openSSLVersion": "OpenSSL 1.1.1f  2020 年 3 月 31 日",
    "modules": [],
    "allocator": "tcmalloc",
    "environment": {
        "distmod": "ubuntu2004",
        "distarch": "x86_64",
        "target_arch": "x86_64"
    }
}

```

### 更新流程

在升級你的 Server CE/Server Pro 執行個體時，MongoDB 版本的更新方式如下：

1. 決定你打算升級到的 Server CE/Server Pro 版本。
2. 找出該特定 Overleaf Server CE/Server Pro 版本所建議的 MongoDB 版本。
3. 按照指示將 MongoDB 升級到目標版本。
4. 升級 Server CE/Server Pro 映像版本並重新啟動執行個體。

我們的建議是始終升級 **Server CE/Server Pro** 到可用的最新版本，因為它一定受到支援（僅限 Server Pro 使用者）。

{% hint style="danger" %}
在執行 Server CE/Pro 升級時，我們建議先升級到已部署主要版本的最新發行版 **之前** 再升級到 **下一個** 主要版本的最新發行版。如果你的部署落後最新版本超過一個主要版本，則需要進行分步升級。

例如，如果你目前執行的是 3.5.10，你需要先升級到 3.5.13 -> 執行完整專案歷史遷移 -> 4.2.9 -> 5.5.4。

你應該 **絕不要** 跳過主要版本（3.5.10 -> 5.5.4）。如果你使用 Toolkit，而且落後最新版本超過一個主要版本，你必須 **不要** 使用 `bin/upgrade` 該腳本，因為你將需要進行手動的多步驟升級。
{% endhint %}

{% hint style="warning" %}
重要的是要確保你有一份 [一致性備份](/on-premises/zh-tw/wei-hu/data-and-backups.md#performing-a-consistent-backup) **之前** 在每次主要版本升級時，以便在需要時能回復。
{% endhint %}

#### 版本支援資訊

如果你決定回到較早版本，這個表格會顯示較早版 Server CE/Server Pro 所建議的 MongoDB 版本，但你應該 **絕不要** 將你的 MongoDB 版本降級。

<table><thead><tr><th width="175">Server CE/Server Pro</th><th width="139" align="center">MongoDB 版本</th><th align="center">最低功能相容性版本</th><th align="center">Node.js 驅動程式支援的最高版本</th></tr></thead><tbody><tr><td>2.0.x</td><td align="center">3.4</td><td align="center">-</td><td align="center">-</td></tr><tr><td>2.1.x 到 2.4.x</td><td align="center">3.6</td><td align="center">-</td><td align="center">-</td></tr><tr><td>>=2.5.0</td><td align="center">4.0</td><td align="center">-</td><td align="center">-</td></tr><tr><td>>=3.1.0</td><td align="center">4.2</td><td align="center">-</td><td align="center">-</td></tr><tr><td>>=3.2.0</td><td align="center">4.4</td><td align="center">-</td><td align="center">-</td></tr><tr><td>>=4.2.0</td><td align="center">5.0</td><td align="center">-</td><td align="center">-</td></tr><tr><td>>=5.1.0</td><td align="center">6.0</td><td align="center">-</td><td align="center">-</td></tr><tr><td>>=5.3.1</td><td align="center">6.0</td><td align="center">5.0</td><td align="center">8.0</td></tr><tr><td>>=5.5.0</td><td align="center">6.0</td><td align="center">6.0</td><td align="center">8.0</td></tr><tr><td>6.0.0</td><td align="center">8.0</td><td align="center">8.0</td><td align="center">8.0</td></tr></tbody></table>

{% hint style="danger" %}
上述最低功能相容性版本是根據與所示 Overleaf 版本搭配使用所建議的對應 MongoDB 版本而定。如果你打算使用更高版本，MongoDB 會有其自身的最低需求。
{% endhint %}

你可以在這裡查看指定可與 MongoDB 搭配使用之 MongoDB Node.js 驅動程式支援版本的相容性表 [這裡](https://www.mongodb.com/docs/drivers/node/current/reference/compatibility/).

你可以查看每個 MongoDB 版本的生命週期結束狀態 [這裡](https://endoflife.date/mongodb).

#### 升級 MongoDB

MongoDB 需要 **逐步升級**。這表示你不能直接從，比如說 `4.0` 到 `5.0`。你需要先更新 `4.2` 到 `4.4`，然後再更新 `5.0`.

{% hint style="info" %}
MongoDB 會對其穩定版本使用偶數。
{% endhint %}

#### **在 Docker 外執行 MongoDB 時的更新說明**

以下是 mongodb.com 上關於升級 MongoDB 的更新說明連結。

* [MongoDB 版本說明 - 從 `4.2` 到 `4.4`](https://www.mongodb.com/docs/v4.4/release-notes/4.4-upgrade-standalone/)
* [MongoDB 版本說明 - 從 `4.4` 到 `5.0`](https://www.mongodb.com/docs/v5.0/release-notes/5.0-upgrade-replica-set/)
* [MongoDB 版本說明 - 從 `5.0` 到 `6.0`](https://www.mongodb.com/docs/v6.0/release-notes/6.0-upgrade-replica-set/)
* [MongoDB 版本說明 - 從 `6.0` 到 `7.0`](https://www.mongodb.com/docs/manual/release-notes/7.0-upgrade-replica-set/#std-label-7.0-upgrade-replica-set)
* [MongoDB 版本說明 - 從 `7.0` 到 `8.0`](https://www.mongodb.com/docs/manual/release-notes/8.0-upgrade-replica-set/#std-label-8.0-upgrade-replica-set)

{% hint style="info" %}
說明適用於 `5.0` 及以上版本指向副本集安裝，而非獨立模式。由於 Server Pro/CE 4.0.1+ 使用交易，MongoDB 需要以副本集方式執行。
{% endhint %}

{% hint style="warning" %}
MongoDB 3.2 到 4.2 的文件現在可透過 <https://www.mongodb.com/docs/legacy/>
{% endhint %}

**基本說明**

在大多數情況下，更新需要先設定相容性旗標，然後才實際更新 mongo 版本。步驟如下：

1. 依照 MongoDB 版本說明設定相容性旗標（請參見下方範例）。
2. 然後更新 mongo 映像：
   1. **Toolkit 使用者** 更新 `MONGO_VERSION`，例如 `MONGO_VERSION=6.0`
   2. **Docker Compose 使用者** 更新 `mongo` 映像標籤，\
      例如 `services -> mongo -> image: mongo:6.0`;

**範例：將 MongoDB 從 `5.0` 到 `6.0`**

先確認我們正在執行 MongoDB `6.0`:

Overleaf Toolkit 使用者：

```bash
bin/docker-compose exec mongo mongod --version
# db 版本 v5.0.24
```

Docker Compose 使用者：

```bash
docker compose exec mongo mongod --version
# db 版本 v5.0.24
```

根據 [升級說明](https://docs.mongodb.com/manual/release-notes/3.6-upgrade-standalone/#upgrade-version-path)，唯一的需求是將 `featureCompatibilityVersion` 設定為 `5.0`。我們可以打開 MongoDB shell 並執行所示指令來完成：

Overleaf Toolkit 使用者：

```bash
bin/mongo
# MongoDB shell 版本 v5.0.24
# ...
# overleaf:PRIMARY> db.adminCommand( { setFeatureCompatibilityVersion: "5.0" } )
# { 
# "ok" : 1,
# ...
# }
overleaf:PRIMARY> exit
# bye
```

{% hint style="info" %}
Docker Compose 使用者可以執行 `docker compose exec mongo mongosh` 來取得 shell，並執行與 Toolkit 使用者相同的指令。
{% endhint %}

Overleaf Toolkit 使用者：

接著我們將使用 `bin/stop` 指令停止 Server CE/Server Pro 和 MongoDB 執行個體，設定 `MONGO_VERSION=6.0` 在 `config/overleaf.rc`，然後重新啟動 `mongo` 服務，使用 `bin/up mongo`）來確認更新順利完成。

最後，我們將把 Server CE/Server Pro 映像版本更新到目標版本，並使用 `bin/up -d` 指令重新建立所有服務。

Docker Compose 使用者：

接著我們將使用 `docker compose stop` 指令，更新 [`docker-compose.yml`](https://github.com/overleaf/overleaf/blob/4b1babd4ea634ab12c54e9a9aea7db0e8a500941/docker-compose.yml) 檔案以使用 `image: mongo:6.0`，然後重新啟動 `mongo` 服務，使用 `docker compose up mongo` 指令來確認更新順利完成。

最後，我們將把 Server CE/Server Pro 映像版本更新到目標版本，並使用 `docker compose up` 指令重新建立所有服務。

**範例：將 MongoDB 從 `6.0` 到 `7.0` （Toolkit 使用者）**

先確認你正在執行 MongoDB `6.0` 使用 `mongod --version` 上方指令。

根據 [升級說明](https://www.mongodb.com/docs/manual/release-notes/7.0-upgrade-replica-set/#std-label-7.0-upgrade-replica-set)，唯一的需求是將 `featureCompatibilityVersion` 設定為 `6.0`。我們可以打開 MongoDB shell 並執行指令 `db.adminCommand({ setFeatureCompatibilityVersion: "6.0" })` .

Overleaf Toolkit 使用者：

```bash
bin/mongo
# ...
# overleaf:PRIMARY> db.adminCommand( { setFeatureCompatibilityVersion: "6.0" } )
# { 
# "ok" : 1,
# ...
# }
overleaf:PRIMARY> exit
# bye
```

接著我們將使用 `bin/stop` 指令停止 Server CE/Server Pro 和 MongoDB 執行個體，設定 `MONGO_VERSION=7.0` 在 `config/overleaf.rc`，然後重新啟動 `mongo` 服務，使用 `bin/up mongo`）來確認更新順利完成。

最後，我們將把 Server CE/Server Pro 映像版本更新到目標版本，並使用 `bin/up -d` 指令重新建立所有服務。

**範例：將 MongoDB 從 `7.0` 到 `8.0` （Toolkit 使用者）**

先確認你正在執行 MongoDB `7.0` 使用 `mongod --version` 上方指令。

根據 [升級說明](https://www.mongodb.com/docs/manual/release-notes/8.0-upgrade-replica-set/#std-label-8.0-upgrade-replica-set)，唯一的需求是將 `featureCompatibilityVersion` 設定為 `7.0`。我們可以打開 MongoDB shell 並執行指令 `db.adminCommand({ setFeatureCompatibilityVersion: "7.0", confirm: true })`。請注意，這現在需要額外的 `confirm: true` 參數。

```bash
bin/mongo
# ...
# overleaf:PRIMARY> db.adminCommand( { setFeatureCompatibilityVersion: "7.0", confirm: true } )
# { 
# "ok" : 1,
# ...
# }
overleaf:PRIMARY> exit
# bye
```

接著我們將使用 `bin/stop` 指令停止 Server CE/Server Pro 和 MongoDB 執行個體，設定 `MONGO_VERSION=8.0` 在 `config/overleaf.rc`，然後重新啟動 `mongo` 服務，使用 `bin/up mongo`）來確認更新順利完成。

最後，我們將把 Server CE/Server Pro 映像版本更新到目標版本，並使用 `bin/up -d` 指令重新建立所有服務。

#### docker compose 使用者的對應指令

對於 docker compose 使用者，對應的指令如下：

* `docker compose exec mongo mongod --version` 顯示 mongo 版本
* `docker compose exec mongo mongosh` 啟動 mongo shell 以執行管理指令
* `docker compose stop` 停止伺服器的指令
* 編輯 [`docker-compose.yml`](https://github.com/overleaf/overleaf/blob/4b1babd4ea634ab12c54e9a9aea7db0e8a500941/docker-compose.yml) 檔案以使用 `image: mongo:6.0` 以升級 mongo 版本
* `docker compose up mongo` 以重新啟動 mongo 服務並確認更新順利完成
* 編輯 [`docker-compose.yml`](https://github.com/overleaf/overleaf/blob/4b1babd4ea634ab12c54e9a9aea7db0e8a500941/docker-compose.yml) 檔案以使用 `image: sharelatex:VERSION` 以升級映像版本
* `docker compose up` 以重新建立所有服務。

### 建立自訂角色

在版本 `5.5.1`中，我們新增了啟動檢查，以驗證 MongoDB 的功能相容性版本。如果你的 MongoDB 資料庫使用驗證（例如基本驗證）， `sharelatex` 容器可能無法啟動，並顯示「*未獲授權在 admin 上執行指令*」權限錯誤。

為了解決這個問題，你可以依照以下說明，在 MongoDB 中建立一個新角色並將它指派給用於存取資料庫的使用者帳戶，或者設定 `ALLOW_MONGO_ADMIN_CHECK_FAILURES=true` ，讓檢查失敗時不會阻止部署啟動。

{% hint style="success" %}
這個新角色 **只** 授予讀取整體叢集 MongoDB 伺服器參數的權限，並可重複用於監控用途，
{% endhint %}

{% code overflow="wrap" %}

```bash
# Toolkit 使用者
$ bin/docker-compose exec -it mongo mongosh -u {{YOUR-ADMIN-USERNAME}} -p

# 使用
overleaf [direct: primary] sharelatex> use admin
已切換至 db admin
overleaf [direct: primary] admin> 

# 建立一個新的角色，授予使用「getParamter」的權限。將下方函式複製並貼到 shell 中，然後按下 Enter 鍵

db.createRole(
  {
    role: "clusterParameterReader",
    privileges: [
      {
        resource: { cluster: true },
        actions: ["getParameter"]    
      }
    ],
    roles: [] 
  }
);

# 切回「sharelatex」資料庫 
use sharelatex
已切換至 db sharelatex
overleaf [direct: primary] sharelatex> 

# 將新的「clusterParameterReader」角色指派給你的資料庫使用者，請將下方函式複製並貼到 shell 中，然後按下 Enter 鍵 
db.grantRolesToUser(
  "{{YOUR-DATABASE-USER}}",
  [
    { role: "clusterParameterReader", db: "admin" }
  ]
);

# 輸入 exit，然後按 Enter 以結束 MongoDB shell
# 執行 bin/up -d 以啟動部署堆疊
$ bin/up -d
```

{% endcode %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/on-premises/zh-tw/wei-hu/updating-mongodb.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
