MongoDB入门到进阶
安装MongoDB
1. 下载:下载地址
2. 配置环境变量,注意到bin目录
3. 创建数据库所在目录,默认在C盘下的data文件夹中的db文件里
自定义数据库路径启动
1 | mongod --dbpath 数据库路径 |
自定义端口号启动
1 | mongod --port 端口号 |
自定义数据库路径 和 端口号 启动
1 | mongod --dbpath 数据库路径 --port 端口号 |
4. cmd输入 mongod 启动服务
5. 通过 localhost:27017 访问
6. cmd输入 mongo 启动客户端
7. 开机自启动mongod服务
在自定义的数据库路径data中新建log文件夹,然后在根目录新建mongod.cfg配置文件(mongodb4后,说是自带服务了,但是我是免安装版的,还是自己配置。)
配置文件内容如下:
1 | <!--配置内容--> |
8. 开机自启动命令:使用管理员权限进入 cmd 窗口
1 | sc.exe create MongoDB binPath= "\"D:\mongod的bin目录\mongod.exe\" --service --config=\"D:\mongod的目录\mongod.cfg\"" DisplayName= "MongoDB" start= "auto" |
9. 然后可在cmd中输入 services.msc 查看
10. 启动、关闭服务命令
1 | // 关闭服务 |
MongoDB权限
1 | // 数据库用户角色 |
MongoDB创建管理员
创建管理员账户:创建 admin用户,可访问管理数据库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24db.createUser({ user: "admin", pwd: "admin", roles: [{
role: "userAdminAnyDatabase",
db: "admin" }
] })
// 或者 db.getUsers()
> show users
{
"_id" : "admin.admin",
"userId" : UUID("7c16bb13-2c6d-49a1-83b0-6074f148d439"),
"user" : "admin",
"db" : "admin",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}创建超级管理员 root:只在admin数据库中可用,超级账号,超级权限。
1 | db.createUser({user: "root",pwd: "root", roles: [ { role: "root", db: "admin" } ]}) |
- 创建用户自己的数据库的管理角色
1 | use yourdatabase |
- 验证用户添加是否成功
1 | mongo admin -u 用户名 -p 密码 |
- 创建完管理员权限用户后,我们就来设置 mongodb的安全性登录,不然就是 默认的无需密码就可以操作数据库。首先,我们需要 卸载原来安装的服务。
1 | sc delete MongoDB |
- 以auth的方式启动服务,开启用户权限认证
1 | sc create MongoDB binpath= "D:\mongodb\bin\mongod.exe --dbpath D:\mongodb\data\db --logpath D:\mongodb\data\log\MongoDB.log --logappend --auth --service" |
- 重启mongodb
1 | net start mongodb |
- 修改权限:也可以授权 root 用户具有操作访问 Java数据库的权限
1 | db.grantRolesToUser("root", [ { |
- 删除权限
1 | // 删除 root 用户 在数据库 admin 中 角色是 root 的权限 |
- 删除 user 为 root 的用户
1 | db.dropUser("root") |
- 用户名不能跟数据库名重合
注意:
以不同用户身份进行多次身份验证不会删除先前已身份验证的用户的凭据。这可能导致连接具有比用户预期更多的权限,并导致逻辑会话内的操作 引发错误。
~
解决:最直白就是重新登录mongo,然后直接授权访问这个数据库进行操作
MongoDB使用
1. 官方文档
1 | <!-- 中文文档 --> |
2. 基本的CRUD
1 | //展示所有数据库 |
查找
1 | db.inventory.insertMany([ |
修改
1 | db.inventory.insertMany( [ |
删除
1 | // 清空集合 |
MongoDB GridFS
1.基本介绍
GridFS 用于存储和恢复那些超过 16M(BSON文件限制)的文件(如:图片、音频、视频等)。
GridFS 也是文件存储的一种方式,但是它是存储在MonoDB的集合中。
GridFS 可以更好的存储大于16M的文件。
GridFS 会将 大文件对象分割成多个小的chunk(文件片段),一般为256k/个,每个chunk将作为MongoDB的一个文档(document)被存储在chunks集合中。
2.存储原理
GridFS 用 两个集合来存储一个文件: fs.files 与 fs.chunks。
每个文件的实际内容被存在chunks(二进制数据)中,和文件有关的meta数据(filenamecontent_type,还有用户自定义的属性)将会被存在files集合中。
以下是简单的 fs.files 集合文档:
1 | { |
以下是简单的 fs.chunks 集合文档:
1 | { |
Spring Boot中使用MongoDB上传文件
以下使用了Spring的cache缓存+swagger3测试MongoDB文件上传。基本的工程搭建我就不一一阐述了,直抒要点。
1. CURD
1 | /** |
存储如图所示,对应Java实体类中的 UserInfo。
如果 UserInfo 类上 没有注明 @Document(collection = “UserInfo”),那么存储的集合名就是 userInfo
如果 UserInfo 类上 注明 @Document(collection = “UserInfo”),那么存储的集合名就是 UserInfo
2.通用的文件上传功能
1 | /** |
上传的文件将会存储在MongoDB的 GridFS 存储桶里。














