一、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. Dos命令删除添加新服务

    安装服务sc create Svnservice binpath= "d:\subversion\bin\svnserve.exe --service -r E:\projectversio ...

  2. Azure Document DB Repository 的实现

    阅读 需要大约  5 分钟. 前景: Azure Cosmos DB 由 Microsoft 提供,是全球分布式多模型数据库. 通过 Azure Cosmos DB 跨任意数量的 Azure 地理区域 ...

  3. linuxGame:文明5汉化

    此包来源苹果戏台的steam平台 参考网页: 1.https://tieba.baidu.com/p/4529797745 2.http://www.civclub.net/bbs/forum.php ...

  4. September 11th 2017 Week 37th Monday

    I believe there is a hero in all of us. 我相信每个人心中都住着一个英雄. For every of us, there are two version with ...

  5. springboot+mybatis+mysql创建简单web后台项目

    第一步:搭建框架 新建进入这个页面 新建名字,第一次可以默认,然后下一步 第三步:选择依赖 第四步:新建项目名和存放项目路径(你可以新建一个文件夹存放) 点击finish,首次创建Springboot ...

  6. Mysql数据库字符集问题

    修改mysql数据库的默认编码方式 修改my.ini文件 加上 default-character-set=gb2312 设定数据库字符集 alter database da_name default ...

  7. php 分享一个object(stdclass)转数组的函数

    经常调用一个借口之后 返回的内容是json串,利用php函数json_decode() 解析json串之后得到的 数据类型为object(stdclass) 这是一个对象,要取其中的内容也可以 取得, ...

  8. Cent OS home下中文目录改成英文目录

    如果安装了中文版的Cent OS之后,root目录和home目录下会出现中文的路径名,如“桌面”.“文档”.“图片”.“公共的”.“下载”.“音乐”.“视频”等目录,这样在命令行上操作十分的不方便,需 ...

  9. python第六课——判断结构

    1.判断结构 格式三: ① if 条件表达式1: 语句块1 elif 条件表达式2: 语句块2 elif 条件表达式3: 语句块3 elif 条件表达式y: 语句块y else: 语句块z ② 执行流 ...

  10. springboot 配置jpa启动报Error processing condition on org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration.pageableCustomizer

    springboot +gradle 配置jpa启动报Error processing condition on org.springframework.boot.autoconfigure.data ...