俗话说好脑子不如烂电脑,今天来记录一下使用springboot时查询mongodb的一些操作。
首先我要有一个实体对应mongodb的collection(也就是表),代码如下:
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Date;
@Data
@Document(collection = "tbl_VehicleFaultSum")
public class MongoVehicleFaultSum {
@Id
private String id;
/**
* 日期
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date date;
/**
* 故障数
*/
private Integer faultCount;
/**
* 统计时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date statisticsTime;
/**
* 企业id
*/
private Integer companyId ;
}
1.通过jpa进行分页查询
需要继承MongoRepository接口。
dao代码如下:
import com.adc.da.mongo.entity.MongoVehicleFaultSum;
import org.springframework.data.mongodb.repository.MongoRepository;
public interface MongoVehicleFaultSumRepo extends MongoRepository<MongoVehicleFaultSum,String> {
}
实现分页查询代码如下:
public List<MongoVehicleFaultSum> queryVehicleFaultSum() { //查询条件 Integer companyId = UserCacheUtils.getCompanyId(); //排序 Sort sort = new Sort(new Sort.Order(Sort.Direction.DESC, "date")); //设置分页 PageRequest pageRequest = new PageRequest(0, 7, sort); MongoVehicleFaultSum query = new MongoVehicleFaultSum(); //设置查询条件 query.setCompanyId(companyId); Example<MongoVehicleFaultSum> example = Example.of(query); //查询 Page<MongoVehicleFaultSum> vehicleFaultSumP = mongoVehicleFaultSumRepo.findAll(example,pageRequest); //将结果拿出来 List<MongoVehicleFaultSum> vehicleFaultSumList = vehicleFaultSumP.getContent(); return vehicleFaultSumList ; }
好了 ,分页条件查询的代码就完成了。
上边的代码在精确查询情况下比较好用的。
今天本人有遇到了查询时间段范围的需求,这个需求貌似上边的代码不能够实现(反正博主百度了好几波也没找到解决方法),于是就有了下边的代码。
2.通过MongoTemplate进行条件查询
直接上代码
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Example; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.Objects; @Service public class MongoVehicleUploadLogService { @Autowired MongoTemplate template; public List<MongoVehicleUploadLog> queryByPage() { Query query = new Query(); Criteria criteria = new Criteria(); //设置查询条件 criteria.and("vin").is(page.getVin()); criteria.and("commandId").is(page.getCommandId()); //设置查询时间范围 criteria.and("baseTime").gte(new Date()).lte(new Date()); query.addCriteria(criteria); //排序 List<Sort.Order> orders = new ArrayList<>(); orders.add(new Sort.Order(Sort.Direction.DESC, "baseTime")); Sort sort = new Sort(orders); query.with(sort); //这个分页要从0开始 PageRequest pageable = new PageRequest(0, 10, sort); query.with(pageable); //查询总条数 long count = template.count(query, MongoVehicleUploadLog.class); //查询数据 List<MongoVehicleUploadLog> mongoVehicleUploadLogs = template.find(query.with(pageable), MongoVehicleUploadLog.class); return mongoVehicleUploadLogs; } }