MongoDB 常用语法
快速导航
概念理解
| 术语 | MongoDB官方名称 | 大白话解释 |
|---|---|---|
| 数据库 | Database | 一个文件夹(存所有数据) |
| 表 | Collection | 文件夹里的分类账本(你要创建的就是这个) |
| 行/记录 | Document | 账本里的一条数据(JSON格式) |
核心理解:
- 数据库 = 最高层次,相当于文件夹管理
- 表 = 文件夹里的一个个txt文件,一个数据库可存储非常多的表
- 记录 = 表当中的一个个字段,存储的是离散字段
Docker环境配置
连接MongoDB Shell
注释:如果MongoDB启动在Docker中,需要使用以下指令进入容器:
docker exec -it mongodb bash
启动MongoDB客户端
# 启动 MongoDB Shell
mongosh
# 连接到本地 MongoDB 服务器
mongosh
# 查看所有数据库
> show dbs
# admin 40.00 KiB
# config 72.00 KiB
# local 40.00 KiB
# runoob 72.00 KiB
# 切换数据库
> use runoob
# switched to db runoob
账号权限体系
问题诊断
核心问题:
- 启动MongoDB容器时开启了
--auth认证模式(生产环境默认配置) - 匿名连接
mongosh→ 无权限 - 必须输入账号密码才能执行
show dbs/ 增删改查
解决步骤
步骤1:退出当前无权限的mongo shell
exit
步骤2:停止当前MongoDB容器
docker stop mongodb
步骤3:删除当前容器
docker rm -f mongodb
步骤4:全新创建MongoDB容器(直接开启认证,一步到位)
docker run -d \
--name mongodb \
-p 27017:27017 \
-e MONGO_INITDB_ROOT_USERNAME=root \
-e MONGO_INITDB_ROOT_PASSWORD=188390 \
mongo --auth
看到 { ok: 1 } 就代表创建成功!
步骤5:测试登录(这次必成功!)
docker exec -it mongodb mongosh -u root -p 188390 --authenticationDatabase admin
步骤6:查看当前数据表
show dbs
修改Python代码配置
因为Python代码也要用密码连接Docker MongoDB!
修改 .env 中的 MONGO_URI:
# 旧配置(无密码,报错)
# MONGO_URI=mongodb://localhost:27017/
# 新配置(带账号密码,正确连接)
MONGO_URI=mongodb://root:123456@localhost:27017/?authSource=admin
账号权限体系
前置知识
- admin数据库:系统根数据库,专门存储所有账号密码,仅用于权限管理,不存业务数据
- root账号:超级管理员账号,仅用于创建用户、修改权限、管理数据库,禁止用于项目开发
- 业务数据库:如
personal_ai,专门存储项目数据 - 项目专用账号:绑定单个业务库,仅拥有读写权限,日常开发/客户端连接唯一使用的账号
权限矩阵
| 角色 | 功能 | 数据范围 | 使用场景 |
|---|---|---|---|
| root + admin | 管理员后台(管权限) | 创建用户、修改权限、管理数据库 | |
| 项目账号 + 业务库 | 开发使用(管数据) | 增删改查业务数据 |
- 一个业务库可以创建多个项目账号,分配不同权限
- 项目账号创建在
admin库,绑定业务库,权限最小化最安全
创建阶段
背景:
- 创建仅能操作
personal_ai业务库的专用账号 - 避免使用root账号带来的安全风险
- 必须使用 root超管管理员 登录后执行
快速登录指令:
# 1. root登录数据库
docker exec -it mongodb mongosh -u root -p 188390 --authenticationDatabase admin
# 2. 切换到系统权限库(必须)
use admin
常规登录指令:
# 1. 进入Docker终端
docker exec -it mongodb bash
# 2. 进入数据库终端
mongosh
# 3. 进入账号认证数据库
use admin
# 4. 登录数据库
db.auth("root", "188390")
创建项目专用账号(核心指令)
db.createUser({
user: "kipleyarch", // 项目专用账号名
pwd: "188390AA52f@", // 高强度密码(支持特殊符号)
roles: [{
role: "readWrite", // 权限:仅读写业务库
db: "personal_ai" // 绑定的业务数据库
}]
})
创建成功标志:
{ ok: 1 }
账号权限说明
- 可对
personal_ai库进行增删改查 - 无法访问其他数据库
- 无管理员权限、无法删库/创建用户
常用操作指令
创建数据库和表
docker exec -it mongodb mongosh -u root -p 188390 --authenticationDatabase admin
解释:
- root = 账号
- 188390 = 密码
- admin = 系统库(账号存储在这里)
在连接进入数据库之后(Docker管理方式),直接指令创建数据库:
# 创建业务数据库
use personal_ai
# 创建数据表(Collection)
db.createCollection("XXX")
# 查看当前数据库中的所有表
show collections
客户端连接配置
固定配置信息
- 账号:
kipleyarch - 密码:
188390AA52f@ - 业务库:
personal_ai - 认证库:
admin - 服务器IP:
162.14.77.140 - 端口:
27017
方式1:服务器命令行登录
docker exec -it mongodb mongosh -u kipleyarch -p "188390AA52f@" --authenticationDatabase admin personal_ai
方式2:本地客户端连接字符串(含@符号编码)
密码中 @ 必须替换为 %40,直接复制使用:
mongodb://kipleyarch:188390AA52f%40@162.14.77.140:27017/personal_ai?authSource=admin
方式3:图形客户端手动填写(Compass/Navicat)
- 主机:
162.14.77.140 - 端口:
27017 - 用户名:
kipleyarch - 密码:
188390AA52f@(直接填原密码) - 认证数据库:
admin - 默认数据库:
personal_ai
常见问题
- 密码含@符号:连接字符串中必须写
%40,图形客户端/命令行直接填原密码 - 修改账号密码:必须用root账号在
admin库下修改 - 认证库固定:所有账号验证都用
authSource=admin - 禁止使用root:开发、程序、客户端连接,一律使用项目专用账号
- 用户归属:项目账号创建在
admin库,绑定业务库,权限最小化最安全
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 kipleyarch@gmail.com