MongoDB常用语法

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

账号权限体系

前置知识

  1. admin数据库:系统根数据库,专门存储所有账号密码,仅用于权限管理,不存业务数据
  2. root账号:超级管理员账号,仅用于创建用户、修改权限、管理数据库,禁止用于项目开发
  3. 业务数据库:如 personal_ai,专门存储项目数据
  4. 项目专用账号:绑定单个业务库,仅拥有读写权限,日常开发/客户端连接唯一使用的账号

权限矩阵

角色 功能 数据范围 使用场景
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

常见问题

  1. 密码含@符号:连接字符串中必须写 %40,图形客户端/命令行直接填原密码
  2. 修改账号密码:必须用root账号在 admin 库下修改
  3. 认证库固定:所有账号验证都用 authSource=admin
  4. 禁止使用root:开发、程序、客户端连接,一律使用项目专用账号
  5. 用户归属:项目账号创建在 admin 库,绑定业务库,权限最小化最安全

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 kipleyarch@gmail.com
Obsidian