springdata-mongodb学习使用笔记
文章目录
1. 学习资料
- 入门级:MongoDB教程|菜鸟教程
- 官方文档:Spring Data MongoDB - Reference Documentation
- 官方API:Spring Data MongoDB 2.1.10.RELEASE API
2. MongoDB数据库安装
参考地址: https://www.runoob.com/mongodb/mongodb-window-install.html
注:给MongoDB设置密码
3. MongoDB客户端使用
本人使用的客户端连接工具为studio 3T,官方地址:https://studio3t.com/
CSDN下载地址(非最新):https://download.csdn.net/download/simadi/11339530
连接MongoDB步骤
第一步:配置MongoDB服务器相关信息
第二步:配置数据库名称和数据库账号和密码
4. spring-data-mongodb的使用
4.1 配置信息
4.1.1 aplication.properties中的配置为
# mongodb数据库配置
spring.data.mongodb.uri=mongodb://name:password@localhost:27017/databaseName
4.2 创建删除集合
// 注入MongoTemplate进行相关的操作
@Resource
private MongoTemplate mongoTemplate;
public void mongdbTest(){
mongoTemplate.createCollection("collectionName");
System.out.println("创建一个集合");
mongoTemplate.dropCollection("collectionName");
System.out.println("删除一个集合");
}
此外在MongoDB中可以无需创建集合,直接插入文档,MongoDB能自动创建集合。
mongoTemplate.insert(exampleList, "collectionName");
4.3 添加数据
mongoTemplate.insert(exampleList, "collectionName");
4.3 创建唯一索引
4.3.1 唯一索引
参考:SpringBoot中MongoDB注解概念及使用
加载字段声明上:@Indexed(unique = true)
4.3.2 复合唯一索引
加在类声明上:
@CompoundIndexes({
// 唯一复合索引:楼层和房号不能相同,不然就是同一个房间了
@CompoundIndex(name = "floor_num", def = "{'floor' : 1, 'num': 1}",unique=true)
})
参考地址:https://www.cnblogs.com/linzhanfly/p/9760821.html
4.4 使用@Query注解进行查询
1. 创建dao接口集成MongoRepository
2. 写方法,在方法上加@Query注解,在@Query()括号内写上JSON格式的条件,其中有value,sort等属性,需要注意的时,目前我只发现value中的查询条件只能写一个,多了会报com.mongodb.util.JSONParseException,因此对应多条件复杂查询还是使用Java类实现比较好
如:
public interface MmxDao extends MongoRepository<Mmx,String> {
/**
* 根据编号和时间段来查找
* @param bh 编号
* @param startTime 开始时间
* @param endTime 结束时间
* @return 返回查询结果集
*/
@Query("{'lxsj':{$gt:?1,$lt:?2}}")
List<Mmx> findByBhAndTime(String bh, Date startTime,Date endTime);
}
4.6 使用方法来实现查询
springData MongoDB中支持的使用方法名查找的方法如,不过需要继承相应的Repository,
具体的请看官方文档
Keyword | Sample | Logical result |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4.5 使用Java类来实现查询
参考地址:https://blog.csdn.net/abc466038366/article/details/83780614
Sort sort = new Sort(Sort.Direction.ASC, “DEVID”).and(new Sort(Sort.Direction.ASC, “TIME”));//多条件DEVID、time
Criteria criteria = Criteria.where(“CHECK”).is(0);//查询条件
Query query = new Query(criteria);
mongoTemplate.find(query.with(sort).limit(1000), UnormalInfo.class);
4.6 模糊查询
参考地址:https://blog.csdn.net/u011555260/article/details/82260441
https://blog.csdn.net/wd521521/article/details/82801192
根据姓名和学号模糊查找学生,最多查找6人
public List<StudentSearch> fuzzySearch(String content) {
Pattern patternName=Pattern.compile("^.*"+content+".*$", Pattern.CASE_INSENSITIVE);
Pattern patternNo=Pattern.compile("^.*"+content+".*$", Pattern.CASE_INSENSITIVE);
Criteria criteria=new Criteria().orOperator(
Criteria.where("name").regex(patternName),
Criteria.where("no").regex(patternNo)
);
Query query=new Query(criteria);
return mongoTemplate.find(query.limit(6),StudentSearch.class);
}
4.7 分页查询
参考地址:https://www.cnblogs.com/jycboy/p/8969035.html
@Resource
private MongoTemplate mongoTemplate;
@Override
public Page<Example> findByBhAndPage(String bh, int pageIndex, int pageSize) {
// 分页信息
Pageable pageable=PageRequest.of(pageIndex,pageSize);
// 排序
Sort sort=new Sort(Sort.Direction.DESC,"bh");
// 查询条件
Criteria criteria=Criteria.where("bh").is(bh);
Query query=new Query(criteria);
// 使用MongoTemplate进行查询,然后使用PageableExecutionUtils.getPage()对查询结果进行包装,将分页信息包含进去
return PageableExecutionUtils.getPage(mongoTemplate.find(query.with(sort).with(pageable), Example.class),
pageable, () -> 0);
}
注:pageIndex从0开始
4.8 根据集合中的字段进行查询
参考地址:https://blog.csdn.net/gao36951/article/details/41074191/