> For the complete documentation index, see [llms.txt](https://ayakaleaf-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://ayakaleaf-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 version v5.0.24
Build Info: {
    "version": "5.0.24",
    "gitVersion": "f034f0c51b3dffef4b8c9452d77ede9888f28f66",
    "openSSLVersion": "OpenSSL 1.1.1f  31 Mar 2020",
    "modules": [],
    "allocator": "tcmalloc",
    "environment": {
        "distmod": "ubuntu2004",
        "distarch": "x86_64",
        "target_arch": "x86_64"
    }
}
```

Docker Compose 使用者：

```bash
docker compose exec mongo mongod --version
db version v5.0.24
Build Info: {
    "version": "5.0.24",
    "gitVersion": "f034f0c51b3dffef4b8c9452d77ede9888f28f66",
    "openSSLVersion": "OpenSSL 1.1.1f  31 Mar 2020",
    "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 發布說明 - 升級 MongoDB 從 `4.2` 到 `4.4`](https://www.mongodb.com/docs/v4.4/release-notes/4.4-upgrade-standalone/)
* [MongoDB 發布說明 - 升級 MongoDB 從 `4.4` 到 `5.0`](https://www.mongodb.com/docs/v5.0/release-notes/5.0-upgrade-replica-set/)
* [MongoDB 發布說明 - 升級 MongoDB 從 `5.0` 到 `6.0`](https://www.mongodb.com/docs/v6.0/release-notes/6.0-upgrade-replica-set/)
* [MongoDB 發布說明 - 升級 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 發布說明 - 升級 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` 映像標籤，\
      e.g. `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 version v5.0.24
```

Docker Compose 使用者：

```bash
docker compose exec mongo mongod --version
# db version 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 version 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` 指令，設定 `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` 指令，設定 `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` 指令，設定 `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
已切換至資料庫 admin
overleaf [direct: primary] admin> 

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

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

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

# 透過將下方函式複製並貼到 shell 中，然後按下 Enter 鍵，將新的 "clusterParameterReader" 角色指派給你的資料庫使用者 
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://ayakaleaf-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.
