# 19.5 MongoDB 8.0

MongoDB 是一款广泛应用的 NoSQL 文档型数据库（Document-oriented Database），采用 BSON（Binary JSON，二进制 JSON）格式进行数据存储，在半结构化数据处理与大规模分布式存储场景中具有技术优势。

相较于传统关系型数据库，MongoDB 具备灵活的模式（Schema）设计能力与良好的水平扩展性。

## 安装

本节将详细介绍在 FreeBSD 操作系统环境下部署 MongoDB 8.0 的方法。

使用 pkg 安装 MongoDB：

```sh
# pkg ins mongodb80
```

或者使用 ports 安装：

```sh
# cd /usr/ports/databases/mongodb80/ 
# make install clean
```

查看 MongoDB 安装后的说明信息：

```sh
# pkg info -D mongodb80
mongodb80-8.0.4_3:
On install:
MongoDB on Raspberry Pi can work but is unsupported upstream.
Please read https://jira.mongodb.org/browse/SERVER-71772 and enable option
ARMV80A if you run this on a non-LSE ARM cpu like Raspberry Pi 4.
# MongoDB 可以在 Raspberry Pi 上运行，但官方不提供支持
# 请阅读 https://jira.mongodb.org/browse/SERVER-71772 并在 Raspberry Pi 4 等非 LSE ARM CPU 上启用 ARMV80A 选项。

MongoDB 6.0 and up do not include the 'mongo' CLI shell anymore. You can
use the MongoDB Shell (https://github.com/mongodb-js/mongosh).
# MongoDB 6.0 及更高版本不再包括 'mongo' CLI shell。
# 你可以使用 MongoDB Shell（https://github.com/mongodb-js/mongosh）。

# pkg install npm
$ npm install mongosh
$ npx mongosh mongodb://127.0.0.1:27017/
# 安装 npm 并使用以下命令安装 mongosh：
# $ npm install mongosh
# 然后使用 npx 启动 mongosh 连接到本地 MongoDB 实例：
# $ npx mongosh mongodb://127.0.0.1:27017/
```

## 服务

安装完成后，需要启动 MongoDB 服务才能正常使用。以下命令用于设置服务开机自启并立即启动服务：

```sh
# service mongod enable   # 设置 MongoDB 服务开机自启
# service mongod start    # 启动 MongoDB 服务
```

## mongosh（MongoDB 官方 Shell CLI）

MongoDB 6.0 及更高版本不再包含传统的 `mongo` 命令行工具，取而代之的是官方的 `mongosh`。在 FreeBSD Ports 源中已经提供 mongosh，无需额外操作。

### 安装 mongosh

使用 pkg 安装：

```sh
# pkg install mongosh
```

或者使用 ports 安装：

```sh
# cd /usr/ports/databases/mongosh/
# make install clean
```

### 测试连接 MongoDB

使用 mongosh 连接到本地 MongoDB 服务：

```sql
# mongosh mongodb://127.0.0.1:27017
Current Mongosh Log ID:	67bca91ccf5bbd1a232d5665
Connecting to:		mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.2.5
Using MongoDB:		8.0.4
Using Mongosh:		2.2.5

For mongosh info see: https://docs.mongodb.com/mongodb-shell/


To help improve our products, anonymous usage data is collected and sent to MongoDB periodically (https://www.mongodb.com/legal/privacy-policy).
You can opt-out by running the disableTelemetry() command.

------
   The server generated these startup warnings when booting
   2025-02-25T01:08:25.311+08:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
------

test>
```

## 配置文件

相关项目文件结构：

```sh
/
└── usr/
    ├── local/
    │   └── etc/
    │       ├── mongodb.conf        # MongoDB 配置文件
    │       └── mongodb.conf.sample # MongoDB 配置文件示例
    └── ports/
        └── databases/
            ├── mongodb80/  # MongoDB 8.0 Port
            └── mongosh/    # MongoDB Shell Port
```

如需进一步配置 MongoDB，可以修改其配置文件。配置文件可以调整数据库的各种参数，如监听地址、端口、日志等。

MongoDB 8.0 的配置文件位于 `/usr/local/etc/mongodb.conf`，配置模板文件位于 `/usr/local/etc/mongodb.conf.sample`。

## 创建用户和密码

默认情况下，MongoDB 不启用访问控制，任何人都可以连接和操作数据库。为了确保安全，建议创建用户并设置密码。

使用 mongosh 连接本地 MongoDB 服务：

```sql
# mongosh mongodb://127.0.0.1:27017
Current Mongosh Log ID:	67bcb0e5337ba1c7d62d5665
Connecting to:		mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.2.5
Using MongoDB:		8.0.4
Using Mongosh:		2.2.5
mongosh 2.4.0 is available for download: https://www.mongodb.com/try/download/shell

For mongosh info see: https://docs.mongodb.com/mongodb-shell/

test> show dbs   // 列出 MongoDB 实例中的所有数据库
admin   180.00 KiB
config   92.00 KiB
local    72.00 KiB
test> use admin   // 切换到 admin 数据库，也可以创建并使用其他数据库
switched to db admin
admin> db.createUser({   // 创建新用户
...   user: 'admin',     // 自定义用户名
...   pwd: 'z',           // 自定义密码，这里设置为 'z'
...   roles:[{
...     role: 'root',      // 授予超级管理员角色，可管理所有数据库
...     db: 'admin'        // 指定用户所在数据库
...   }]
... })
{ ok: 1 }
admin> quit   // 退出 MongoDB shell
```

你可以直接复制下面的文本到命令行中：

```sql
db.createUser({ 
   user: 'admin',    
   pwd: 'z', 
   roles:[{
     role: 'root',   
     db: 'admin'   
   }]
 })
```

用户创建完成后，需要启用密码验证以确保数据库安全。

编辑 `/usr/local/etc/mongodb.conf`：

去掉 `#security:` 前的注释符号 `#`，然后在下一行加入 `authorization: enabled`，如下所示：

```ini
security:
  authorization: enabled   # 启用 MongoDB 用户认证和访问控制
```

重启 MongoDB 服务以应用配置更改：

```sh
# service mongod restart
```

## 登录方式

启用访问控制后，需要使用用户名和密码登录 MongoDB。配置完成后，可以使用以下方式登录 MongoDB。

### 登录方式 ①

使用 mongosh 连接到本地 MongoDB 服务：

```sql
# mongosh mongodb://127.0.0.1:27017
Current Mongosh Log ID:	67bcb1bafa0080a2132d5665
Connecting to:		mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.2.5
Using MongoDB:		8.0.4
Using Mongosh:		2.2.5
mongosh 2.4.0 is available for download: https://www.mongodb.com/try/download/shell

For mongosh info see: https://docs.mongodb.com/mongodb-shell/

test> use admin // 必须先切换到数据库 admin
switched to db admin
admin> db.auth('admin', 'z') // 使用用户名和密码登录 MongoDB 数据库
{ ok: 1 }
admin>
```

### 登录方式 ②

使用用户名 `admin` 和密码 `z` 登录 MongoDB：

```sql
# mongosh -u admin -p z
Current Mongosh Log ID:	67bcb200cbc3b601fb2d5665
Connecting to:		mongodb://<credentials>@127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.2.5
Using MongoDB:		8.0.4
Using Mongosh:		2.2.5
mongosh 2.4.0 is available for download: https://www.mongodb.com/try/download/shell

For mongosh info see: https://docs.mongodb.com/mongodb-shell/

test>
```

## 参考文献

* 阳'Blog. 宝塔面板使用 MongoDB 一些教程 PHP7\[EB/OL]. (2023-09-28)\[2026-03-25]. <https://yooer.me/%E5%AE%9D%E5%A1%94%E9%9D%A2%E6%9D%BF-%E4%BD%BF%E7%94%A8mongodb%E4%B8%80%E4%BA%9B%E6%95%99%E7%A8%8B-php7.html>. 详细介绍了 MongoDB 安装与基础配置，为本文提供实践参考。
* 吃饭@我. mongodb 添加管理员和用户\[EB/OL]. \[2026-03-25]. <https://chenyejun.github.io/blog/mongoDB/mongodbAddUser.html>. 系统讲解了 MongoDB 用户创建与角色划分，提供权限管理参考。

## 课后习题

1. 配置 HTTPS 支持，并实现 SSL 证书自动签名
2. 使用 MongoDB 部署 WordPress。
3. 加固安全设置，使 MongoDB 能够面向互联网。
