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 {
}

实现分页查询代码如下:

public List 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 example = Example.of(query);
//查询
    Page vehicleFaultSumP = mongoVehicleFaultSumRepo.findAll(example,pageRequest);
//将结果拿出来
    List 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 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 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 mongoVehicleUploadLogs = template.find(query.with(pageable),
                MongoVehicleUploadLog.class);

        return mongoVehicleUploadLogs;
    }
    
}

 

 

 

 

 

 

你可能感兴趣的:(Java,#,SpringBoot,java)