> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cloudthinker.io/llms.txt
> Use this file to discover all available pages before exploring further.

# MongoDB

> Kết nối cơ sở dữ liệu MongoDB với CloudThinker để phân tích truy vấn document, tinh chỉnh hiệu suất và thu thập thông tin vận hành

Kết nối cơ sở dữ liệu MongoDB của bạn để [Tony](/vi/guide/agents/tony) (Database Engineer) có thể phân tích truy vấn, tối ưu hiệu suất và giám sát sức khỏe cơ sở dữ liệu.

## Nền tảng được hỗ trợ

| Nền tảng            | Hỗ trợ             |
| ------------------- | ------------------ |
| **MongoDB tự host** | 4.x, 5.x, 6.x, 7.x |
| **MongoDB Atlas**   | Tất cả phiên bản   |

## Điều kiện tiên quyết

* Một instance MongoDB hoặc Atlas cluster có thể tiếp cận từ CloudThinker qua mạng.
* Quyền admin để tạo người dùng cơ sở dữ liệu riêng và gán role.
* Connection string MongoDB kèm thông tin xác thực.

## Thiết lập

Chọn nền tảng MongoDB của bạn để xem hướng dẫn kết nối cụ thể.

<Tabs>
  <Tab title="MongoDB tự host">
    <Steps>
      <Step title="Kết nối với tư cách admin">
        Kết nối tới instance MongoDB bằng Mongo shell (`mongosh`) với quyền admin.

        *Thay `<admin-user>`, `<admin-password>` và `<your-host>` bằng thông tin xác thực của bạn. Cơ sở dữ liệu `/admin` là bắt buộc.*

        ```bash theme={null}
        mongosh "mongodb://<admin-user>:<admin-password>@<your-host>:27017/admin"
        ```
      </Step>

      <Step title="Chuyển sang cơ sở dữ liệu admin">
        Đảm bảo bạn đang ở cơ sở dữ liệu `admin` nơi người dùng được tạo:

        ```javascript theme={null}
        use admin
        ```
      </Step>

      <Step title="Tạo người dùng chỉ đọc">
        Tạo người dùng riêng cho CloudThinker sử dụng các role tích hợp sẵn của MongoDB:

        ```javascript theme={null}
        db.createUser({
          user: "<cloudthinker_user>",
          pwd: "<secure-password>",
          roles: [
            { role: "readAnyDatabase", db: "admin" },
            { role: "clusterMonitor", db: "admin" }
          ]
        })
        ```

        Role `clusterMonitor` được khuyến nghị để phân tích metrics hiệu suất.
      </Step>

      <Step title="Cấu hình truy cập mạng">
        Đảm bảo CloudThinker có thể tiếp cận cơ sở dữ liệu:

        * Thêm IP CloudThinker vào firewall hoặc security group
        * Đảm bảo MongoDB được bind tới địa chỉ IP có thể truy cập trong `mongod.conf`
      </Step>

      <Step title="Thêm kết nối trong CloudThinker">
        Điều hướng đến **Connections → MongoDB** và dán connection string:

        ```
        mongodb://<cloudthinker_user>:<secure-password>@<your-host>:27017/admin?tls=true&appName=CloudThinker
        ```

        Bao gồm `tls=true` nếu triển khai của bạn bắt buộc mã hóa TLS. Nhấn **Connect**. CloudThinker hiển thị trạng thái **Connected** khi thành công.
      </Step>
    </Steps>
  </Tab>

  <Tab title="MongoDB Atlas">
    <Steps>
      <Step title="Điều hướng đến Database Access">
        Đăng nhập vào MongoDB Atlas dashboard tại [cloud.mongodb.com/v2](https://cloud.mongodb.com/v2).

        Từ thanh bên trái, cuộn xuống phần **Security** và chọn **Database Access**.
      </Step>

      <Step title="Thêm người dùng cơ sở dữ liệu mới">
        Nhấn **Add New Database User** và cấu hình:

        * **Authentication Method**: Password
        * **Username**: `<cloudthinker_user>`
        * **Password**: tạo mật khẩu bảo mật
        * **Database User Privileges**: chọn **Built-in Role** → **Read Any Database**

        Nhấn **Add User**.
      </Step>

      <Step title="Cấu hình truy cập mạng">
        Điều hướng đến **Network Access** trong phần **Security**:

        * Nhấn **IP Access List** → **+ Add IP Address**
        * Nhập địa chỉ IP tĩnh của CloudThinker hiển thị trên màn hình thiết lập kết nối CloudThinker
        * Thêm ghi chú như `CloudThinker Agent Access` để kiểm toán sau này
        * Nhấn **Confirm**
      </Step>

      <Step title="Lấy connection string">
        Điều hướng đến tab **Databases** (trong **Deployment**), nhấn **Connect** trên cluster của bạn và chọn **Drivers**.

        Atlas cung cấp string theo định dạng:

        ```
        mongodb+srv://<username>:<password>@<cluster-name>.<cluster-hash>.mongodb.net/?appName=<ClusterName>
        ```

        Tùy chỉnh cho CloudThinker:

        ```
        mongodb+srv://<cloudthinker_user>:<secure-password>@<cluster-name>.<cluster-hash>.mongodb.net/admin?appName=CloudThinker&tls=true&retryWrites=false
        ```

        * `/admin` chỉ định rõ cơ sở dữ liệu xác thực
        * `appName=CloudThinker` giúp dễ nhận biết trong log cơ sở dữ liệu
        * `tls=true` bắt buộc mã hóa truyền tải
        * `retryWrites=false` phù hợp cho người dùng chỉ đọc này
      </Step>

      <Step title="Thêm kết nối trong CloudThinker">
        Điều hướng đến **Connections → MongoDB** và dán connection string đã tùy chỉnh. Nhấn **Connect**. CloudThinker hiển thị trạng thái **Connected** khi thành công.
      </Step>
    </Steps>
  </Tab>
</Tabs>

## Chi tiết kết nối

| Trường                 | Mô tả                                                | Ví dụ                                         |
| ---------------------- | ---------------------------------------------------- | --------------------------------------------- |
| **Connection string**  | MongoDB URI đầy đủ bao gồm thông tin xác thực        | `mongodb+srv://user:pass@host/admin?tls=true` |
| **TLS/SSL**            | Bắt buộc TLS cho kết nối — dùng `tls=true` trong URI | `true`                                        |
| **Read preference**    | Node nào xử lý thao tác đọc                          | `primary`                                     |
| **Connection timeout** | Giây chờ kết nối                                     | `10`                                          |

## Quyền bắt buộc

| Role              | Mục đích                                                                                        |
| ----------------- | ----------------------------------------------------------------------------------------------- |
| `readAnyDatabase` | Phân tích truy vấn và mức sử dụng index trên tất cả collection                                  |
| `clusterMonitor`  | Truy cập `serverStatus`, `replSetGetStatus` và các lệnh chẩn đoán khác để lấy metrics hiệu suất |

<Tip>
  Gán cả hai role để mở khóa phân tích truy vấn toàn diện và giám sát sức khỏe cluster. Không bao giờ cấp role ghi hoặc admin cho người dùng CloudThinker.
</Tip>

## Khả năng của agent

Sau khi kết nối, Tony có thể:

| Khả năng               | Mô tả                                                          |
| ---------------------- | -------------------------------------------------------------- |
| **Phân tích truy vấn** | Xác định slow query, phân tích execution plan bằng `explain()` |
| **Khuyến nghị index**  | Tìm index còn thiếu, xác định index không dùng                 |
| **Metrics hiệu suất**  | Giám sát kết nối, mức sử dụng bộ nhớ và replication lag        |

### Xác minh kết nối

```text theme={null}
@tony #report list all MongoDB databases and summarize their collection counts
```

### Ví dụ prompt

```text theme={null}
@tony #report analyze slow queries on the production MongoDB instance
@tony #recommend find missing indexes on the users collection
@tony #report check replication lag on the secondary nodes
```

## Khắc phục sự cố

<Accordion title="Xác thực thất bại">
  * Xác minh username và password chính xác
  * Đảm bảo người dùng được tạo trên cơ sở dữ liệu `admin`, hoặc thêm `?authSource=admin` vào connection string
  * Với Atlas: xác nhận người dùng được tạo với đúng đặc quyền trong Database Access
</Accordion>

<Accordion title="Connection refused hoặc timeout">
  * Kiểm tra IP CloudThinker đã được thêm vào danh sách Atlas Network Access hoặc firewall của bạn
  * Với MongoDB local, đảm bảo `bindIp` trong `mongod.conf` không chỉ đặt là `127.0.0.1`
</Accordion>

<Accordion title="Metrics hiệu suất không khả dụng">
  * Tony cần role `clusterMonitor` để chạy `serverStatus` và `replSetGetStatus`
  * Thêm role `clusterMonitor` vào người dùng CloudThinker trên cơ sở dữ liệu `admin` và kết nối lại
</Accordion>

## Bảo mật

* **Quyền tối thiểu** — chỉ cấp các quyền mà agent cần cho trường hợp sử dụng của bạn; bắt đầu với quyền chỉ đọc và mở rộng sau.
* **Chỉ đọc theo mặc định** — sử dụng thông tin xác thực chỉ đọc trừ khi bạn muốn agent thực hiện thay đổi qua kết nối này.
* **Xoay vòng thông tin xác thực** — xoay vòng khóa và token theo lịch trình thông thường của bạn; CloudThinker sẽ lấy giá trị mới khi bạn cập nhật kết nối.
* **Thu hồi khi bàn giao** — xóa thông tin xác thực tại nhà cung cấp khi bạn xóa một kết nối hoặc khi đồng nghiệp rời nhóm.

- **Bắt buộc TLS** — luôn dùng `tls=true` trong connection string để mã hóa dữ liệu truyền tải.
- **Role tối thiểu** — chỉ cấp `readAnyDatabase` và `clusterMonitor`; không bao giờ cấp role ghi hoặc admin.

## Liên quan

<CardGroup cols={2}>
  <Card title="Tony Agent" icon="database" href="/vi/guide/agents/tony">
    Agent tối ưu cơ sở dữ liệu
  </Card>

  <Card title="Kết nối PostgreSQL" icon="https://mintcdn.com/cloudthinker/aLd-ttc-SCW-aFky/images/icons/postgresql.svg?fit=max&auto=format&n=aLd-ttc-SCW-aFky&q=85&s=8bb2ac033d0a2ccbef51154a76e1e819" href="/vi/guide/connections/postgresql" width="24" height="24" data-path="images/icons/postgresql.svg">
    Hướng dẫn thiết lập cho cơ sở dữ liệu PostgreSQL
  </Card>
</CardGroup>
