目录
配置MongoDB
MongoDB服务的启动
studio3T客户端
MongoDB和sql术语的区别
MongoDB连接数据库
通过java连接(后面会用spring boot来替换)
使用命令操作MongoDB
查询数据库
用户操作
认证登录
将数据导入数据库(工具)
索引的创建
spring data MongoDB
注解
持久层类的dao规范
spring data 的分页(jpa通用)
条件匹配器
GridFS存取文件
用GridFsTemplate存储文件
存文件
取文件
前言
MongoDB和redis一样是非关系型数据库
spring data MongoDB参考 https://blog.csdn.net/yzj17025693/article/details/89514504
#数据库路径
dbpath=c:\MongoDB\data\
#日志输出文件路径
logpath=c:\MongoDB\logs\mongodb.log
#错误日志采用追加模式,配置这个选项后mongodb的日志会追加到现有的日志文件,而不是从新创建一个新文件
logappend=true
#启用日志文件,默认启用
journal=true
#这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false
quiet=false
#端口号 默认为27017
port=27017
测试连接
MongoDB存的都是json数据
添加对应的依赖包
创建和删除数据库
创建数据库直接使用use,切换数据库也是use,但是新创建的不显示,
必须要包含一个集合(表的集合)才能显示
集合的创建和删除
必须先切换到某个数据库
插入文档
替换文档
相当于先删除后插入
更新文档
只更新指定的字段,在某些情况下使用更新文档效率肯定会更高点
每条数据的字段可以不一样(同一个字段可以存不同类型的数据,也可以不存)
但是官方建议统一字段,也修改随意修改字段的数据类型,如 一个字符串改成数组
删除文档
查询文档
创建用户
查询用户和删除用户
修改用户角色
这种方式需要用户名和密码进行登录
修改密码
选择json,然后选择文件,然后直接下一步导入即可
选取一个document(table),然后建立索引,选取字段,勾选unique,直接创建,name就会自动创建
能够防止插入相同的数据,如果这个字段是需要添加的,那么需要使用索引
参考spring data jpa
@Document
指定MongoDB的表,相当于jpa的@Table
@Id
用于指定id,其它的属性如果和MongoDB里的字段相同,就不需要再配置了,但是Id一定要配
参考spring data jpa
继承MongodbRepository
页面传过来的肯定是从1开始,PageRequest.of是从0开始,所以我们一般还需要在service层处理一下
取出数据
可以参考spring data jpa的 https://blog.csdn.net/long476964/article/details/79677526
这部分知识需要spring boot和MongoDB整合的知识
这2个表是gridFS(MongoDB的一个工具)生成的,fs.files用于存储文件的元信息,比如文件名,文件创建时间
而fs.chunks是存储文件的二进制数据,使用gridFS存的话,会自动给文件拆分成每个256KB大小的块
fs.chunks的表结构
fs.files的表结构
他们是一对多的逻辑关系(非物理关系,因为MongoDB没有外键)
fs.files是一的一方, 因为一个文件可能会被拆分成多个256K的fs.chunks
而fs.chunks的files_id字段就对应着fs.files主键
stroe的第一个参数是文件流,第二个参数是元数据信息,可以写多个
取文件会比较复杂一点,因为要设置到下载,
需要用到下载流
下面是创建一个bean,返回GridFSBucket对象
这个对象能开启下载流,进行安全的下载
@Configuration
public class MongoConfig {
@Value("${spring.data.mongodb.database}")
String db;
@Bean
public GridFSBucket getGridFSBucket(MongoClient mongoClient){
MongoDatabase database = mongoClient.getDatabase(db);
GridFSBucket bucket = GridFSBuckets.create(database);
return bucket;
}
}
从是数据库读取文件
@Test
public void queryFile() throws IOException
{
String fileId = "5cf2b5f5bf9e4125701b46a3";
//根据id查询文件,会自动指定fs.files这个张表
//返回了这张表的信息
GridFSFile gridFSFile =
gridFsTemplate.findOne(Query.query(Criteria.where("_id").is(fileId)));
//打开下载流对象,会通过id自动查询到fs.chunks这张表
GridFSDownloadStream gridFSDownloadStream =
gridFSBucket.openDownloadStream(gridFSFile.getObjectId());
//创建gridFsResource,用于获取流对象
GridFsResource gridFsResource = new GridFsResource(gridFSFile,gridFSDownloadStream);
//获取流中的数据
String s = IOUtils.toString(gridFsResource.getInputStream(), "UTF‐8");
System.out.println(s);
}