实习笔记-MongoDB
一、MongoDB简介
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。
MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

spring-data-mongodb提供了MongoTemplate与MongoRepository两种方式访问mongodb。
- MongoRepository操作简单
- MongoTemplate操作灵活
二、基于MongoTemplate的CRUD
2.1 MongoTemplate常用方法
mongoTemplate.findAll(User.class)
: 查询User文档的全部数据;mongoTemplate.findById(, User.class)
: 查询User文档id为id的数mongoTemplate.find(query, User.class)
: 根据query内的查询条件查询mongoTemplate.upsert(query, update, User.class)
: 修改mongoTemplate.remove(query, User.class)
: 删除mongoTemplate.insert(User)
: 新增
2.2 Query对象
- 创建一个
query
对象(用来封装所有条件对象),再创建一个criteria对象(用来构建条件) - 精准条件:
criteria.and(“key”).is(“条件”)
;模糊条件:criteria.and(“key”).regex(“条件”)
- 封装条件:
query.addCriteria(criteria)
- 大于(创建新的criteria):
Criteria gt = Criteria.where(“key”).gt(“条件”)
小于(创建新的criteria):Criteria lt = Criteria.where(“key”).lt(“条件”)
Query.addCriteria(new Criteria().andOperator(gt,lt));
- 一个query中只能有一个
andOperator()
。其参数也可以是Criteria数组; - 排序 :
query.with(new Sort(Sort.Direction.ASC, “age”). and(new Sort(Sort.Direction.DESC, “date”)))
1 | /** |
三、基于MongoRepository的CRUD
Spring Data提供了对mongodb数据访问的支持,只需要继承MongoRepository类,按照Spring Data规范就可以了。
3.1 规范编写
SpringData方法定义规范:


- 不能随便声明,要符合一定的规范;
- 查询方法要以
find/read/get
开头; - 涉及到条件查询时,条件的属性用条件关键字连接;
- 条件属性的首字母需要大写;
- 支持属性的级联查询,但若当前类有符合条件的属性则优先使用,而不使用级联属性,若需要使用级联属性,则属性之间使用_强制进行连接。
3.2 条件查询
使用 Example example = Example.of(user);
封装查询条件
1 | //条件查询 |
3.3 模糊条件查询
1 | //模糊条件查询 |
3.4 分页查询
1 | //分页查询 |
四、业务中实现
4.1 分页查询
以dj_admin中分页查询所有金币任务为例:
1 | public PageResponseBean<GoldTask> queryList(GoldTask goldTask, int page, int size) { |
4.2 规范编写
还是以dj_admin中根据类型发布状态查询:
1 | public List<GoldTask> queryByShowAdWallAndStatus(int showAdWall, int status) { |