#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 那样跨库授权,权限是"在哪个库就对哪个库有效"。


相关推荐
GOTXX1 小时前
【Qt】Qt Creator开发基础:项目创建、界面解析与核心概念入门
开发语言·数据库·c++·qt·图形渲染·图形化界面·qt新手入门
猿小喵1 小时前
记录一次TDSQL网关夯住故障
运维·数据库·mysql
电商api接口开发1 小时前
如何在C#中使用LINQ对数据库进行查询操作?
数据库·c#·linq
hnsqls2 小时前
Redis 常问知识
数据库·redis·缓存
经年小栈3 小时前
性能优化-Spring参数配置、数据库连接参数配置、JVM调优
数据库·spring·性能优化
一个小白13 小时前
C++ 用红黑树封装map/set
java·数据库·c++
神奇小永哥3 小时前
redis之缓存雪崩
数据库·redis·缓存
麻花20134 小时前
sql server分析表大小
数据库
纪元A梦5 小时前
Redis最佳实践——秒杀系统设计详解
数据库·redis·缓存
老马啸西风6 小时前
Neo4j GDS-09-neo4j GDS 库中路径搜索算法实现
网络·数据库·算法·云原生·中间件·neo4j·图数据库