|
| 1 | +## Mongo Express 配置说明 |
| 2 | + |
| 3 | +以下为 `mongo-express` 的 docker-compose 配置示例,并对每一项进行了详细注释: |
| 4 | + |
| 5 | +```yaml |
| 6 | +networks: |
| 7 | + 1panel-network: # 指定使用的外部网络,便于与其他服务通信 |
| 8 | + external: true |
| 9 | +services: |
| 10 | + mongo-express: |
| 11 | + container_name: ${CONTAINER_NAME} # 容器名称,可通过环境变量自定义 |
| 12 | + deploy: |
| 13 | + resources: |
| 14 | + limits: |
| 15 | + cpus: ${CPUS} # 限制容器可用的 CPU 数量 |
| 16 | + memory: ${MEMORY_LIMIT}# 限制容器可用的内存大小 |
| 17 | + environment: |
| 18 | + ME_CONFIG_BASICAUTH: true # 启用基本认证,防止未授权访问 |
| 19 | + ME_CONFIG_BASICAUTH_PASSWORD: ${BASICAUTH_PASSWORD} # 访问 mongo-express 的密码 |
| 20 | + ME_CONFIG_BASICAUTH_USERNAME: ${BASICAUTH_USERNAME} # 访问 mongo-express 的用户名 |
| 21 | + ME_CONFIG_MONGODB_URL: mongodb://${PANEL_DB_ROOT_USER}:${PANEL_DB_ROOT_PASSWORD}@${MONGO_HOST}:27017 # 连接 MongoDB 的 URL,包含用户名、密码和主机(数据库服务) |
| 22 | + image: mongo-express:1.0.2-20 # 使用的 mongo-express 镜像及版本 |
| 23 | + labels: |
| 24 | + createdBy: Apps # 自定义标签,可用于标识容器用途 |
| 25 | + networks: |
| 26 | + - 1panel-network # 连接到指定的网络 |
| 27 | + ports: |
| 28 | + - ${HOST_IP}:${PANEL_APP_PORT_HTTP}:8081 # 将主机端口映射到容器 8081 端口 |
| 29 | + restart: on-failure:5 # 失败时自动重启,最多重启 5 次 |
| 30 | +``` |
| 31 | +
|
| 32 | +> **说明**: |
| 33 | +> |
| 34 | +> - 请根据实际环境设置各个 `${}` 变量的值。 |
| 35 | +> - `mongo-express` 是一个可视化 MongoDB 管理工具,适合开发和测试环境使用。 |
| 36 | +> |
| 37 | +# MongoDB 快速指南 |
| 38 | + |
| 39 | +## 1. env 配置 |
| 40 | + |
| 41 | +**作用:** 存储 MongoDB 连接信息,避免硬编码敏感数据 |
| 42 | + |
| 43 | +```dotenv |
| 44 | +# MongoDB 连接字符串(包含用户名、密码、主机地址) |
| 45 | +# host.docker.internal 用于 Docker 容器访问宿主机 MongoDB |
| 46 | +MONGO_URI=mongodb://username:password@host.docker.internal:27017 |
| 47 | +
|
| 48 | +# 数据库名称 - 博客项目使用的数据库 |
| 49 | +DB_NAME=blogs-db |
| 50 | +
|
| 51 | +# 集合名称 - 数据库中的表,存储博客文档 |
| 52 | +COLLECTION_NAME=blogs-db-dev |
| 53 | +``` |
| 54 | + |
| 55 | +## 2. 初始化指令 |
| 56 | + |
| 57 | +**作用:** 在 MongoDB 中创建数据库和集合,初始化项目 |
| 58 | + |
| 59 | +```javascript |
| 60 | +// 连接到 MongoDB 服务(使用实际的用户名和密码) |
| 61 | +mongosh "mongodb://localhost:27017" --username <user> --password <pwd> |
| 62 | +
|
| 63 | +// 切换到 blogs-db 数据库(不存在则自动创建) |
| 64 | +use blogs-db; |
| 65 | +
|
| 66 | +// 插入初始文档,同时创建 blogs-db-dev 集合 |
| 67 | +db["blogs-db-dev"].insertOne({test: "init"}); |
| 68 | +
|
| 69 | +// 验证集合已创建 |
| 70 | +show collections; |
| 71 | +
|
| 72 | +// 退出 mongosh |
| 73 | +.exit |
| 74 | +``` |
| 75 | + |
| 76 | +## 3. Go 代码使用 |
| 77 | + |
| 78 | +**作用:** 在后端代码中连接和操作 MongoDB 数据库 |
| 79 | + |
| 80 | +```go |
| 81 | +// 第一步:连接 MongoDB 服务 |
| 82 | +// 使用 .env 中的 MONGO_URI,包含认证信息 |
| 83 | +client, _ := mongo.Connect(ctx, options.Client().ApplyURI(os.Getenv("MONGO_URI"))) |
| 84 | +
|
| 85 | +// 第二步:获取数据库对象 |
| 86 | +// DB_NAME = "blogs-db" |
| 87 | +db := client.Database(os.Getenv("DB_NAME")) |
| 88 | +
|
| 89 | +// 第三步:获取集合对象 |
| 90 | +// COLLECTION_NAME = "blogs-db-dev",相当于传统数据库中的表 |
| 91 | +collection := db.Collection(os.Getenv("COLLECTION_NAME")) |
| 92 | +
|
| 93 | +// 第四步:执行数据库操作 |
| 94 | +collection.Find(ctx, filter) // 查询数据 |
| 95 | +collection.InsertOne(ctx, doc) // 插入单条数据 |
| 96 | +collection.UpdateOne(ctx, filter, update) // 更新数据 |
| 97 | +collection.DeleteOne(ctx, filter) // 删除数据 |
| 98 | +``` |
0 commit comments