一、MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

    MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似jsonbson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引
  二、MongoDB常见使用场景用于处理文档的存放等,这样的目的主要是更加便于管理
  四、MongoDB的应用
  1)目录
  

  2)依赖包(pom.xml)

   <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
</parent> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.0.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
<version>2.0.6.RELEASE</version>
</dependency>
</dependencies>

  3)需要用到的下载配置MongoConfiguration

/**
* file 文件处理配置
*/
@Configuration
public class MongoConfiguration { @Bean
public GridFSBucket gridFSBucket(MongoDbFactory mongoDbFactory) {
//主要是配置GridFSBuckets用于下载
return GridFSBuckets.create(mongoDbFactory.getDb());
}
}

  4)实现过程MongoServiceImpl

@Service
@Transactional
public class MongoServiceImpl implements IMongoService { @Autowired
private GridFsTemplate gridFsTemplate; @Autowired
private GridFSBucket gridFSBucket; @Autowired
private MongoTemplate mongoTemplate; /**
* 上传文件
* @param file
* @return
* @throws FileNotFoundException
*/
@Override
public String uploadFile(File file) throws FileNotFoundException {
ObjectId objectId = gridFsTemplate.store(new FileInputStream(file), file.getName());
return objectId.toHexString();
} /**
* 上传文件
* @param inputStream
* @param fileName
* @return
*/
@Override
public String uploadFile(InputStream inputStream, String fileName) {
ObjectId objectId = gridFsTemplate.store(inputStream, fileName);
return objectId.toHexString();
} /**
* 下载文件
* @param mongoId
* @param outputStream
*/
@Override
public void downloadFile(String mongoId, OutputStream outputStream) throws IOException {
// GridFSFile gridFSFile = gridFsTemplate.findOne(Query.query(Criteria.where("_id").is(mongoId)));
// GridFsResource gridFsResource = new GridFsResource(gridFSFile);
// IOUtils.copy(gridFsResource.getInputStream(), outputStream);
//上面这种方式也可以实现下载
gridFSBucket.downloadToStream(new ObjectId(mongoId), outputStream);
} /**
* 删除文件
* @param mongoId
*/
@Override
public void deleteFile(String mongoId) {
gridFsTemplate.delete(Query.query(Criteria.where("_id").is(mongoId)));
} /**
* 保存对象
* @param t
* @param <T>
*/
@Override
public <T> void save(T t) {
mongoTemplate.save(t);
} /**
* 查询对象
* @param query
* @param clazz
* @param <T>
* @return
*/
@Override
public <T> List<T> find(Query query, Class<T> clazz) {
return mongoTemplate.find(query, clazz);
} /**
* 查询单个对象
* @param query
* @param clazz
* @param <T>
* @return
*/
@Override
public <T> T findOne(Query query, Class<T> clazz) {
return mongoTemplate.findOne(query, clazz);
} /**
* 删除对象
* @param query
* @param clazz
* @param <T>
*/
@Override
public <T> void delete(Query query, Class<T> clazz) {
mongoTemplate.findAndRemove(query, clazz);
} }

  说明:这里包含了两个部分,一个是文件,一个是对象的处理

  5)测试

  a、文件测试FileController

@RestController
@RequestMapping(value = "/file")
public class FileController { private Logger logger = LoggerFactory.getLogger(FileController.class); @Autowired
private IMongoService mongoService; @RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
public ResultInfo uploadFile(MultipartFile multipartFile) {
ResultInfo resultInfo = new ResultInfo();
try {
resultInfo.setData(mongoService.uploadFile(multipartFile.getInputStream(), multipartFile.getOriginalFilename()));
} catch (Exception e) {
logger.error("upload file error:", e);
resultInfo.setStatus(false);
resultInfo.setFailCode(e.getMessage());
}
return resultInfo;
} @RequestMapping(value = "/downloadFile", method = RequestMethod.POST)
public ResultInfo downloadFile(@RequestBody Map<String, Object> map, HttpServletResponse response) {
ResultInfo resultInfo = new ResultInfo();
try {
response.setContentType("multipart/form-data");
response.setHeader("Content-Disposition", "attachment;fileName=test.mp3");
mongoService.downloadFile(map.get("mongoId").toString(), response.getOutputStream());
} catch (Exception e) {
logger.error("download file error:", e);
resultInfo.setStatus(false);
resultInfo.setFailCode(e.getMessage());
}
return resultInfo;
} @RequestMapping(value = "/deleteFile", method = RequestMethod.POST)
public ResultInfo deleteFile(@RequestBody Map<String, Object> map) {
ResultInfo resultInfo = new ResultInfo();
try {
mongoService.deleteFile(map.get("mongoId").toString());
} catch (Exception e) {
logger.error("delete file error:", e);
resultInfo.setStatus(false);
resultInfo.setFailCode(e.getMessage());
}
return resultInfo;
}
}

  b、对象测试

/**
* 对象存储,测试
*/
@Component
public class MongoTask implements CommandLineRunner { @Autowired
private IMongoService mongoService; @Override
public void run(String... args) throws Exception {
mongoService.save(new User(1L, "test1", 25));
mongoService.save(new User(2L, "test2", 25));
System.out.println(mongoService.find(Query.query(Criteria.where("name").regex("test")), User.class));
System.out.println(mongoService.findOne(Query.query(Criteria.where("name").is("test2")), User.class));
mongoService.delete(Query.query(Criteria.where("name").is("test2")), User.class);
}
}

  五、源码地址:https://github.com/lilin409546297/spring-mongodb

sprinboot之mongodb的更多相关文章

  1. springboot 集成mongodb

    环境依赖 在pom文件引入spring-boot-starter-data-mongodb依赖: <dependency> <groupId>org.springframewo ...

  2. SpringBoot非官方教程 | 第八篇:springboot整合mongodb

    转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot8-mongodb/ 本文出自方志朋的博客 这篇文 ...

  3. 【翻译】MongoDB指南/聚合——聚合管道

    [原文地址]https://docs.mongodb.com/manual/ 聚合 聚合操作处理数据记录并返回计算后的结果.聚合操作将多个文档分组,并能对已分组的数据执行一系列操作而返回单一结果.Mo ...

  4. 【翻译】MongoDB指南/CRUD操作(四)

    [原文地址]https://docs.mongodb.com/manual/ CRUD操作(四) 1 查询方案(Query Plans) MongoDB 查询优化程序处理查询并且针对给定可利用的索引选 ...

  5. 【翻译】MongoDB指南/CRUD操作(三)

    [原文地址]https://docs.mongodb.com/manual/ CRUD操作(三) 主要内容: 原子性和事务(Atomicity and Transactions),读隔离.一致性和新近 ...

  6. 【翻译】MongoDB指南/CRUD操作(二)

    [原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关 ...

  7. 【翻译】MongoDB指南/CRUD操作(一)

    [原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(一) 主要内容:CRUD操作简介,插入文档,查询文档. CRUD操作包括创建.读取.更新和删 ...

  8. CRL快速开发框架系列教程十二(MongoDB支持)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  9. MongoDB系列(二):C#应用

    前言 上一篇文章<MongoDB系列(一):简介及安装>已经介绍了MongoDB以及其在window环境下的安装,这篇文章主要讲讲如何用C#来与MongoDB进行通讯.再次强调一下,我使用 ...

随机推荐

  1. Flask配置文件和 路由系统

    debug = True开启debug模式 当你的代码在界面增减之后不用刷新界面自动更新 app.logger.error("这是error模式") app.logger.info ...

  2. swift版的CircleView

    swift版的CircleView 效果图 源码 // // CircleView.swift // CircleView // // Created by YouXianMing on 15/10/ ...

  3. 基于NSString处理文件的高级类

    基于NSString处理文件的高级类 我已经把处理文件的类简化到了变态的程度,如果你还有更简洁的方法,请告知我,谢谢! 使用详情: 源码: // // NSString+File.h // Maste ...

  4. Windows平台使用Gitblit搭建Git服务器教程

    Windows平台使用Gitblit搭建Git服务器图文教程 Git服务现在独树一帜,相比与SVN有更多的灵活性,最流行的开源项目托管网站Github上面,如果托管开源项目,那么就是免费使用的,但是闭 ...

  5. mysql 注入基础知识

    (1)注入的分类---仁者见仁,智者见智. 下面这个是阿德玛表哥的一段话,个人认为分类已经是够全面了.理解不了跳过,当你完全看完整个学习过程后再回头看这段.能完全理解下面的这些每个分类,对每个分类有属 ...

  6. rz -be 上传文件解压失败

    在把Windows上的文件传至Linux端时用到SecureCRT,一般小文件都没有问题,文件太大时则出现了上传后的文件只有几K大小,当然大于2个G的是不可能传的上去的了.对于几百M到1G多的大文件要 ...

  7. DA-GAN技术【简介】【机器通过文字描述创造图像】

    [题外话:今天上课我做了一个关于DA-GAN技术的ppt演讲,写一点东西留念一下...] 转载请注明出处:https://www.cnblogs.com/GraceSkyer/p/9107471.ht ...

  8. java.sql.SQLException: Incorrect string value: '\xE5\xB0‘

    mysql插入中文字符报java.sql.SQLException: Incorrect string value: '\xE5\xB0‘ #原因:由于默认情况下,mysql的字符集是latin1(I ...

  9. P3558 [POI2013]BAJ-Bytecomputer

    题目描述 A sequence of integers is given. The bytecomputer is a device that allows the following operati ...

  10. 2018 - 2019 CTU Open Contest H. Split Game 【SG函数】

    H. Split Game time limit per test 1.0 s memory limit per test 256 MB input standard input output sta ...