要求
使用多条件查询
遇到的问题
1, 如何比较数字
2, 下一级怎么比较
浪费了半天的时间
代码展示
@Autowired
private MongoTemplate mongoTemplate;
private Criteria createSearchCriteria(Map<String, Object>parameterMap)
{
Criteria criteria = new Criteria();
if (parameterMap.containsKey("tag_name"))
{
criteria.and("tag_list.tag_name").is(parameterMap.get("tag_name"));
}
if (parameterMap.containsKey("leads_level"))
{
long leads_level = Integer.parseInt(parameterMap.get("leads_level").toString());//str_leads_level;
criteria.and("leads_level").is(leads_level);
}
if (parameterMap.containsKey("action_type")){
long action_type = Integer.parseInt(parameterMap.get("action_type").toString());
criteria.and("action_type").is(action_type);
}
//时间这里是从开始
if (parameterMap.containsKey("start_time")){
long start_time = Integer.parseInt(parameterMap.get("start_time").toString());
// criteria.and("start_time").is(start_time);
//这个地方有大于必须有小于不然会报错,报类型转换失败的错误
criteria.and("start_time").gte(start_time).lte( Calendar.getInstance().getTimeInMillis());
}
return criteria;
}
public PageModel searchCustomer(Map<String, Object>parameterMap, int cursor, int perPageCount){
PageModel pageModel = new PageModel();
Query query = new Query();
Criteria criteria = createSearchCriteria(parameterMap);
query.addCriteria(criteria);
Pageable pageable = PageRequest.of(cursor,perPageCount);// new PageRequest(cursor,perPageCount);(过时的写法)
List<TiktokCustomerDetail> tiktokCustomerDetailList = mongoTemplate.find(query.with(pageable),TiktokCustomerDetail.class,"custom_detail");
long total = mongoTemplate.count(query,TiktokCustomerDetail.class,"custom_detail");
pageModel.setCurrent(cursor);
pageModel.setList(tiktokCustomerDetailList);
pageModel.setSize(perPageCount);
double t_totalPageCount = (double) total / perPageCount;
pageModel.setPages( (int)Math.ceil(t_totalPageCount) );//总页数
pageModel.setTotal((int)total);
return pageModel;
}
PageModel 的结构
@Data
public class PageModel<T> {
//总数据条数
private int total;
//当页条数
private int size;
//当前页
private int current;
//总页数
private int pages;
//当前页数据
private List<T> list;
}