此處MongoDB的複雜的分頁採用d調用MongoTemplate來實現正則表達式
springboot中application.yml 配置spring
spring
data:
mongodb:
uri: mongodb://username:password@host:port/databasemongodb
基本的查詢能夠經過 spring data jpa來實現,for examplespringboot
public interface TestDao extends MongoRepository<Test,String> {
}app
1.編寫MongoDB分頁查詢工具類,查詢總條數以及分頁的方法函數
/**
* 查詢總條數
* @param operations
* @param collectionName
* @param clazz
* @return
*/
public long getTotalCount(List<AggregationOperation> operations,String collectionName,Class clazz){
Aggregation aggregationCount = Aggregation.newAggregation(operations);
List mappedResults = mongoTemplate.aggregate(aggregationCount, collectionName, clazz).getMappedResults();
if(null == mappedResults){
return 0;
}else{
return mappedResults.size();
}
}工具
/**
* collection的信息分頁查詢
* @param page
* @param pageSize
* @param sorts
* @param operations
* @param collectionName
* @param clazz
* @return
*/
public Page<T> getPageList(int page, int pageSize, Sort sorts, List<AggregationOperation> operations,
String collectionName, Class clazz){
long totalCount = getTotalCount(operations,collectionName,clazz);
operations.add(Aggregation.skip((long) (page-1) * pageSize));
operations.add(Aggregation.limit(pageSize));
Aggregation aggregation = Aggregation.newAggregation(operations);
AggregationResults<FormControlsDTO> results = mongoTemplate.aggregate(aggregation,collectionName,clazz);
Pageable pageable = PageRequest.of(page-1, pageSize, sorts);
return new PageImpl(results.getMappedResults(), pageable, totalCount);
}
.net
2. 注入工具類,並使用聚合函數來添加設置查詢條件orm
Sort sorts = null;
List<AggregationOperation> operations = new ArrayList<>();
//設置排序
sorts = new Sort(Sort.Direction.ASC,sort);
operations.add(Aggregation.sort(Sort.Direction.ASC, sort));
//精確匹配
operations.add(Aggregation.match(Criteria.where("id").is(id)));
//使用正則表達式模糊匹配
Pattern pattern = Pattern.compile("^.*"+keyword+".*$", Pattern.CASE_INSENSITIVE);
operations.add(Aggregation.match(Criteria.where(LpConstants.KEYWORD).regex(pattern)));排序
//and or 組合
Criteria criteria1 = new Criteria().orOperator(Criteria.where("a").regex(pattern), Criteria.where("b").regex(pattern)); Criteria c = new Criteria().andOperator(new Criteria().where("id").is(id), criteria1); operations.add(Aggregation.match(c));
//日期比較
operations.add(Aggregation.match(Criteria.where("create_time").gte(format.parse(beginTime))));
operations.add(Aggregation.match(Criteria.where("create_time").lte(format.parse(endTime))));
Page<Test> page = mongoDao.getPageList(page,pageSize,sorts,operations,"collectionName",Test.class);