SpringBoot學習筆記33——MongDB分頁查詢和按時間範圍查詢

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

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章