#MongoDB 快速上手

docker pull mongo

docker run -d --name my-mongo -p 27017:27017 mongo

docker exec -it my-mongo mongo

// 使用mongoDB 4.x版本

docker pull mongodb/mongodb-community-server:4.4.2-ubuntu2004-20230514T053842Z

docker run -d --name my-mongo -p 27017:27017 镜像id

docker exec -it my-mongo mongo

// 配置docker代理 下载镜像

root@localhost docker.service.d\]# pwd /etc/systemd/system/docker.service.d \[root@localhost docker.service.d\]# cat http-proxy.conf \[Service

Environment="HTTP_PROXY=http://192.168.xx.xx:7890"

Environment="HTTPS_PROXY=http://192.168.xx.xx:7890"

Environment="NO_PROXY=localhost,127.0.0.1"

🚪进入 Mongo Shell 后的第一步

你进入后会看到类似提示符:

bash 复制代码
>

说明已经进入 Mongo Shell,现在就可以操作数据库了。


🧾 1. 查看当前数据库

js 复制代码
db

默认是 test 数据库。


🗂️ 2. 查看所有数据库

js 复制代码
show dbs

如果没有手动插入数据,有些数据库可能不会显示。


🧱 3. 创建 / 切换数据库

js 复制代码
use mydb

🔸注意:MongoDB 会在你首次向这个库写入数据时才真正创建它。


📂 4. 创建集合(类似表)

js 复制代码
db.createCollection("users")

不过你也可以直接插入文档,MongoDB 会自动创建集合:

js 复制代码
db.users.insertOne({ name: "Lily", age: 24 })

插入的文档是会被插入到你当前所在的数据库中的集合 users 中


📥 5. 插入数据

插入单条文档:

js 复制代码
db.users.insertOne({ name: "Nova", age: 22 })

插入多条文档:

js 复制代码
db.users.insertMany([
  { name: "Qianjue", age: 25 },
  { name: "Luna", age: 30 }
])

🔍 6. 查询数据

查询全部:

js 复制代码
db.users.find()

美化显示:

js 复制代码
db.users.find().pretty()

查询条件:

js 复制代码
db.users.find({ age: { $gt: 24 } })  // 查找 age > 24 的用户

✏️ 7. 更新数据

js 复制代码
db.users.updateOne(
  { name: "Lily" },
  { $set: { age: 26 } }
)

❌ 8. 删除数据

删除一条:

js 复制代码
db.users.deleteOne({ name: "Lily" })

删除多条:

js 复制代码
db.users.deleteMany({ age: { $lt: 25 } })

🧾 9. 查看集合列表

js 复制代码
show collections

🔐 10. 创建用户(可用于认证)

如果你还没设置好权限模式,创建用户可以这样:

js 复制代码
use admin
db.createUser({
  user: "myuser",
  pwd: "mypassword",
  roles: [ { role: "readWrite", db: "mydb" } ]
})

📌 总结:常用命令清单

操作 命令
查看数据库 show dbs
切换数据库 use dbname
查看集合 show collections
插入文档 insertOne / insertMany
查询文档 find()
更新文档 updateOne() / updateMany()
删除文档 deleteOne() / deleteMany()
创建集合 createCollection()
创建用户 db.createUser(...)

🧠 你可以先练习上面这些基本操作,对 MongoDB 的"无模式""JSON文档式结构"会有个感性认识。


MongoDB 创建用户命令

✅ 命令内容

js 复制代码
use admin

db.createUser({
  user: "myuser",
  pwd: "mypassword",
  roles: [ { role: "readWrite", db: "mydb" } ]
})

📖 一行一讲解


🔹 use admin

👉 表示切换到 admin 数据库。

MongoDB 的权限系统是和数据库绑定的,用户在哪个数据库下创建,就属于哪个数据库。

  • 一般来说:
    • 管理员账户建议放在 admin 数据库下(相当于超级管理员作用域)
    • 普通读写用户可以放在业务数据库下(如:mydb

💡 举一反三:

js 复制代码
use mydb  // 如果你只想为 mydb 创建一个普通读写用户

🔹 db.createUser({...})

这是创建用户的标准命令,格式如下:

js 复制代码
db.createUser({
  user: "<用户名>",
  pwd: "<密码>",
  roles: [ ... ]
})

✨ 参数详解:

参数名 含义
user 用户名
pwd 密码
roles 用户权限列表,支持多个权限组合

🔸 user: "myuser"

👉 创建的用户名是 "myuser"。你登录 MongoDB 时就可以这样连接:

bash 复制代码
mongosh -u myuser -p mypassword --authenticationDatabase admin

🔸 pwd: "mypassword"

👉 用户密码,配合用户名一起登录用。

⚠️ 不建议用过于简单的密码,生产环境要强密码 + TLS 连接。


🔸 roles: [ { role: "readWrite", db: "mydb" } ]

👉 这个数组定义了 用户的权限角色,每个角色有两个部分:

字段 说明
role 角色名,比如 readWritereaddbAdminroot
db 授权作用的数据库
这行的含义是:

给这个用户 myuser,在 mydb 数据库上分配 readWrite 权限。


📚 常用权限角色参考表

角色名 权限说明
read 只读(查询数据)
readWrite 读写(增删改查)
dbAdmin 管理数据库结构(如建表、索引)
userAdmin 管理用户(创建、修改权限)
root 超级权限(所有数据库全部权限)

🎯 举一反三案例

🌟 创建只读用户:

js 复制代码
use mydb
db.createUser({
  user: "reader",
  pwd: "123456",
  roles: [ { role: "read", db: "mydb" } ]
})

🌟 创建多权限用户:

js 复制代码
use admin
db.createUser({
  user: "adminuser",
  pwd: "adminpass",
  roles: [
    { role: "readWrite", db: "mydb" },
    { role: "dbAdmin", db: "mydb" },
    { role: "userAdmin", db: "admin" }
  ]
})

🌟 创建超级用户:

js 复制代码
use admin
db.createUser({
  user: "root",
  pwd: "123456",
  roles: [ { role: "root", db: "admin" } ]
})

🧠 总结理解图:

复制代码
一个用户(user)
 └── 拥有多个角色(roles)
       └── 每个角色作用于某个数据库(db)
             └── 给定的权限类型(role: read / write / admin)

MongoDB 是基于 数据库级别的权限模型,不像 MySQL 那样跨库授权,权限是"在哪个库就对哪个库有效"。


相关推荐
2301_8025023318 分钟前
哈工大计算机系统2025大作业——Hello的程序人生
数据库·程序人生·课程设计
Alan3164 小时前
Qt 中,设置事件过滤器(Event Filter)的方式
java·开发语言·数据库
TDengine (老段)5 小时前
TDengine 集群容错与灾备
大数据·运维·数据库·oracle·时序数据库·tdengine·涛思数据
Lao A(zhou liang)的菜园6 小时前
高效DBA的日常运维主题沙龙
运维·数据库·dba
迪迦不喝可乐6 小时前
mysql知识点
数据库·mysql
不太可爱的大白7 小时前
MySQL 事务的 ACID 四大特性及其实现原理
数据库·mysql
观测云8 小时前
HikariCP 可观测性最佳实践
数据库
文牧之8 小时前
PostgreSQL的扩展 dblink
运维·数据库·postgresql
趁你还年轻_8 小时前
Redis-旁路缓存策略详解
数据库·redis·缓存
在云上(oncloudai)9 小时前
AWS DocumentDB vs MongoDB:数据库的技术抉择
数据库·mongodb·aws