参考网址:https://blog.csdn.net/salmonellavaccine/article/details/53907535
使用索引查询的java语句
@Override
public Pagination<OperateData> findAll(OperateData hl, int start, int limit) {
Query query = new Query();
List<Criteria> andOperatorList = new ArrayList<Criteria>();
if (null != hl.getUid())
andOperatorList.add(new Criteria("uid").is(hl.getUid()));
if (null != hl.getDate())
andOperatorList.add(new Criteria("date").is(hl.getDate()));
if (null != hl.getProvince())
andOperatorList.add(new Criteria("province").is(hl.getProvince()));
if (null != hl.getChannel())
andOperatorList.add(new Criteria("channel").is(hl.getChannel()));
if (andOperatorList.size() > 0) {
query.addCriteria(new Criteria().andOperator(andOperatorList.toArray(new Criteria[0])));
}
// 获取总条数
long totalCount = this.mongoLogTemplate.count(query, OperateData.class,"operate_data");
query.with(new Sort(new Order[] { new Order(Sort.Direction.ASC, "time") }));
if(limit > 0) {
query.skip(start);// skip相当于从那条记录开始
query.limit(limit);// 从skip开始,取多少条记录
}
query.withHint("date_1_province_1_channel_1"); //强制指定使用索引
List<OperateData> arrs = this.mongoLogTemplate.find(query, OperateData.class,"operate_data");
return new Pagination<OperateData>((int) totalCount, arrs);
}