mongoDB配置、远程连接、可视化工具操作和springboot集成

一、创建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

下载安装打开,直接创建新的连接:

image-20211221161300939

  • 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写的吧。

image-20211221163046196

删除表:

db.mydb.drop()

image-20211221163456939

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: 					# 实际想要连接的数据库名称

实际上和使用可视化工具连接所需要的操作几乎是一样的

启动项目,配置成功你就会在日志里找到连接成功和信息的英文,否则就是:

image-20211222155358845

检查一下配置就好了,使用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,打开可视化工具更直观的查看一下:

image-20211222162130850

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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值