俗話說好腦子不如爛電腦,今天來記錄一下使用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; } }