一、创建root角色,配置验证库
切换到MongoDB安装目录下的bin目录中
[root@iZuf62pz302spstnjqk7fvZ]# cd /www/server/mongodb/bin
使用命令mongo
,进入数据库中,并使用数据库admin:
[root@iZuf62pz302spstnjqk7fvZ bin]# mongo
MongoDB shell version v4.4.6
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("896fc60a-34b6-4718-9d08-7696d77cee33") }
MongoDB server version: 4.4.6
> use admin
switched to db admin
使用use
命令,如果数据库存在就切换导数据中,如果不存在则创建数据库;admin是默认数据库,本来存在,使用命令直接切换到该数据库。
db.createUser
创建用户:
[root@iZuf62pz302spstnjqk7fvZ bin]# mongo
MongoDB shell version v4.4.6
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("896fc60a-34b6-4718-9d08-7696d77cee33") }
MongoDB server version: 4.4.6
> use admin
switched to db admin
> db.createUser({user: 'root', pwd: 'admin_ning', roles: ['root']})
1
创建root用户并赋予root权限,创建成功返回1,否则0;也可以使用db.auth('name','pwd')
来查看,同样的结果。
使用use
命令创建测试库 ning_test
二、使用工具远程连接mongoDB
可用的可视化管理工具很多,但是一大部分都仅支持比较低的版本,我的mongoDB版本是4.4.6,选择了NoSQL Manager for MongoDB 这个工具,当然也可以选择其他的,只要版本支持就可以,不然只能连接,不能进行操作,例如MMS(Mongo Management Studio)
下载安装打开,直接创建新的连接:
- Host选择MongoDB安装的ip地址
- Connect to database 选择想要连接的数据库,例如刚才创建的ning_test
- Authentication 选择SCRAM-SHA-256(Mongo 4.x default)
- 填入 user和password 这里要填的是你的验证库的root账户的用户名和密码
- Authentication DB 就是指定验证库,也就是admin,不用改
- 测试连接,成功之后,保存连接
三、可视化工具直接操作数据库和springboot集成
1、创建表
开启一个shell页面,执行语句:
db.createCollection('mydb')
我的可视化工具需要刷新一下才能看到collection中创建的mydb,可能是软件原因,GUI写的吧。
删除表:
db.mydb.drop()
2、增删改查
以MySQL为例,不管是增删改查哪一个,是不是都需要指定哪一个表,对哪一个表进行操作,mongoDB同样也是如此,使用db.getCollection('tableName')
来指定表名,括号里面的放的是表名,表示接下来的操作是对这个表进行的;
拿到表之后就可以进行操作了,后面直接接.XXX,db.getCollection('tableName').XXX
也就是增删改查对应的函数;
# {}中放的键值对,字段名、字段值
db.getCollection('mydb').insert({}) #添加 ,{}要添加到表中的数据
db.getCollection('mydb').remove({}) #删除 ,{}删除数据所需要的条件,类比mysql的where
db.getCollection('mydb').update({}, {$set:{}}); #修改 ,第一个{}放的是修改查询的条件,$set对应的{}放的是修改后的数据
db.getCollection('mydb').find({}) #查询 ,{}中放查询所需要的条件,如果直接{},则为查询所有
例如:
# 添加数据,执行两次,虽然数据一样,但是会自动生成唯一id, _id,Object类型的
db.getCollection('mydb').insert({"userId" : "014","uclass" : "B","name" : "Back","age" : 11,"email" : "b14@sina.com","birthday" : ISODate("2018-07-31T03:46:13.885Z"),"dataStatus" : 1});
如果使用条件时用自动生成的_id作为添加,则需要Object(value),不然查出来的结果为空Script executed successfully, an empty result returned.
# 查询
db.getCollection('mydb').find({'_id':ObjectId('61c181bcd1b1a71f883a3251')})
# 修改
db.getCollection('mydb').update({'_id':ObjectId('61c181bcd1b1a71f883a3251')},{$set:{'userId':'015'}})
# 删除
db.getCollection('mydb').remove({'_id':ObjectId('61c181bcd1b1a71f883a3251')})
3、springboot集成MongoDB
直接使用全家桶里面的template吧,当然使用client也是可以的。
导入依赖:
<!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-mongodb -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>2.2.4.RELEASE</version>
</dependency>
配置文件配置一下:
spring:
data:
mongodb:
host: # ip地址
port: 27017
username: # 验证库的用户名
password: # 验证库的密码
authentication-database:
database: # 实际想要连接的数据库名称
实际上和使用可视化工具连接所需要的操作几乎是一样的
启动项目,配置成功你就会在日志里找到连接成功和信息的英文,否则就是:
检查一下配置就好了,使用template还是非常的简单方便。
4、保存图片到数据库
4.1、添加图片数据导数据库
先创建一个数据库吧,photos
,过程就不说啦,直接可视化工具+语法操作就好啦
- 创建图片信息保存的model,并指定数据库
- 保存数据到数据库数据用BSON来保存
- 查询展示
BSON( Binary Serialized Document Format) 是一种二进制形式的存储格式,采用了类似于 C 语言结构体的名称、对表示方法,支持内嵌的文档对象和数组对象,具有轻量性、可遍历性、高效性的特点,可以有效描述非结构化数据和结构化数据。
信息保存的model:
import lombok.Data;
import lombok.experimental.Accessors;
import org.bson.types.Binary;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import java.time.LocalDateTime;
@Data
@Document("photos") //指定数据库名称
@Accessors(chain = true)
public class UploadFile {
@Id //使用@Id或者@MongoId来指定id映射数据库的_id,未使用注解默认映射_id
private String id;
/** 文件名 */
private String name;
/** 上传时间 */
private LocalDateTime createdTime;
/** 文件内容 */
private Binary content;
/** 文件类型 */
private String contentType;
/** 文件大小 */
private long size;
/** 文件状态 */
private String docStatus;
}
postman请求添加一个文档:
@PostMapping("/uploadFileToDb")
public ResponseModel uploadFileToDb(@RequestBody MultipartFile multipartFile) throws IOException {
return goodsService.uploadFileToDb(multipartFile);
}
public ResponseModel uploadFileToDb(MultipartFile multipartFile) throws IOException {
UploadFile uploadFile = new UploadFile()
.setName(multipartFile.getOriginalFilename())
.setContent(new Binary(multipartFile.getBytes()))
.setContentType(multipartFile.getContentType())
.setCreatedTime(LocalDateTime.now())
.setSize(multipartFile.getSize())
.setDocStatus("1");
UploadFile save = mongoTemplate.save(uploadFile);
return new ResponseModel(save);
}
保存成功会返回存放信息的model,打开可视化工具更直观的查看一下:
4.2、从数据拿出图片数据
@GetMapping(value = "/getImages/{id}",produces = {MediaType.IMAGE_JPEG_VALUE, MediaType.IMAGE_PNG_VALUE})
public byte[] getImages(@PathVariable("id") String id){
ResponseModel responseModel = goodsService.getImages(id);
UploadFile uploadFile = (UploadFile) responseModel.getData();
return uploadFile.getContent().getData();
}
public ResponseModel getImages(String id) {
UploadFile uploadFile = mongoTemplate.findById(id, UploadFile.class);
return new ResponseModel(uploadFile);
}
postman请求一下,成功显示图片数据!
http://localhost:8082/goods/getImages/61c2ca9b57c55b689ad09716