一、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. datediff

    DateDiff()是计算机函数. 中文名 日期比较函数 外文名 DateDiff() 作    用 得 出两个日期之间的间隔 用    途 返回两个日期之间的差值 允许数据类型 timeinterv ...

  2. 如何获取UITableView中cell的frame值

    如何获取UITableView中cell的frame值 这个可以用来处理UITableView弹出键盘的问题 本人视频教程系类   iOS中CALayer的使用 效果: 源码: // // ViewC ...

  3. Python读写oracle数据库

    最近项目中需要用到Python调用oracle实现读写操作,踩过很多坑,历尽艰辛终于实现了.性能怎样先不说,有方法后面再调优嘛.现在把代码和注意点记录一下. 1. 所需Python工具库 cx_Ora ...

  4. September 05th 2017 Week 36th Tuesday

    I always in the deepest despair, meet the most beautiful sunrise. 我总是在最深的绝望里遇见最美丽的惊喜. Some pessimist ...

  5. Maven实战(十)利用 Nexus 来构建企业级 Maven 仓库

    目录 一.简介 Nexus是Maven仓库管理器,用来搭建一个本地仓库服务器,这样做的好处是便于管理,节省网络资源,速度快,还有一个非常有用的功能就是可以通过项目的SNAPSHOT版本管理,来进行模块 ...

  6. OpenStack虚拟机快照和增量备份实现

    1 快照的概念一般对快照的理解就是能够将系统还原到某个瞬间,这就是快照的作用.快照针对要保存的数据分为内存快照和磁盘快照,内存快照就是保存当前内存的数据,磁盘快照就是保存硬盘的数据.快照针对保存方式又 ...

  7. 那些不明不白的$符号设计--Sass和Emmet,变量设计原理相通

    以前看到php变量的定义,直接使用$符号开始,怎么看都不习惯.后来呀,在使用Emmet的过程中,又接触到了$符号.今天,在学习Sass的过程种,再一次接触到$符号,兴致所致,不由得想写一篇,对比一下搞 ...

  8. [转] Eclipse安装SVN插件

    eclipse里安装SVN插件,一般来说,有三种方式: 1. 直接下载SVN插件,将其解压到eclipse的对应目录里 2. 使用eclipse 里Help菜单的“Install New Softwa ...

  9. centos下Zabbix Agent端部署和安装

    首先重复一下前面的规划 server端:  192.168.136.144    centos6.5 (虚拟机) agent端:    192.168.136.155    centos6.5( 虚拟 ...

  10. [转载]AVFormatContext结构体详细分析

        AVFormatContext描述一个媒体文件或媒体流的构成和基本信息. 这是FFMpeg中最为基本的一个结构,是其他所有结构的根,是一个多媒体文件或流的根本抽象.其中nb_streams和s ...