mongoTemplate日期查询详解

7 篇文章 0 订阅

插入

字段类型为Date,插入mongo数据库时,该字段类型为ISODate。

测试数据:startDate为6月20日的一共有6条数据。

 

我们的查询条件以及结果:

 

 

经过查看我们可以得知:

1.数据库字段类型为ISODate时,查询时条件参数为Date类型时,程序会自动更换时区。

2.数据库字段类型为ISODate时,查询时条件参数为时间格式字符串时,程序查询不到数据。

测试代码如下:

    @Test
    public void testTime1(){
        String str = "2022-6-19 10:29:35";
        Date date = TestUtils.appointTtime(str);
        String str2 = "2022-06-20T09:15:58.799Z";
        Criteria criteria = Criteria.where("startDate").gt(str2);
        Query query = new Query();
        List<TestTable> testTable = mongoTemplate.find(query.addCriteria(criteria), TestTable.class, "testTable");
        testTable.forEach(testTable1 -> {
            System.out.println(testTable1.getId()+testTable1.getStartDate());
        });
    }
    public static Date appointTtime(String time){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            Date parse = sdf.parse(time);
            return parse;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

实体类代码:

@Data
public class TestTable extends BaseDTO implements Serializable {

    private static final long serialVersionUID = 1L;
    /**
     * 主键id
     */
    private String id;
    /**
     * 区划ID
     */
    private String regionId;
    /**
     * 用户名
     */
    private String userName;
    /**
     * 年龄
     */
    private Integer age;
    /**
     * 创建时间
     */
    private String createTime;
    /**
     * 创建日期
     */
    private Date createDate;
    /**
     * 开始时间
     */
    private Date startDate;
    /**
     * 结束时间
     */
    private Date endDate;
    /**
     * 结束时间format
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date endDateFormat;

    private int num;

    public static TestTable getDefault(){
        TestTable t = new TestTable();
        t.setRegionId("101"+ TestUtils.getSixStringRandom());
        t.setAge(12);
        t.setStartDate(new Date());
        t.setCreateTime(TestUtils.getNowString());
        t.setEndDate(new Date());
        t.setEndDateFormat(new Date());
        return t;
    }
}

多个时间字段查询

数据:

查询结果:

 

代码:

    @Test
    public void testTime2(){
        String str = "2022-6-20 18:29:35";
        Date date = TestUtils.appointTtime(str);
        Criteria criteria = Criteria.where("startDate").gt(date).and("endDate").lt(date);
        Query query = new Query();
        List<TestTable> testTable = mongoTemplate.find(query.addCriteria(criteria), TestTable.class, "testTable");
        testTable.forEach(testTable1 -> {
            System.out.println(testTable1.getId()+testTable1.getStartDate());
        });
    }

 重点来啦:同一个字段范围查询

测试数据如下:

代码如下:

    @Test
    public void testTime3(){
        String str = "2022-6-20 18:29:35";
        Date date = TestUtils.appointTtime(str);
        String str2 = "2022-6-20 19:29:35";
        Date endDate = TestUtils.appointTtime(str2);
        Criteria criteria = new Criteria().andOperator(Criteria.where("startDate").gt(date),Criteria.where("startDate").lt(endDate));
        Query query = new Query();
        List<TestTable> testTable = mongoTemplate.find(query.addCriteria(criteria), TestTable.class, "testTable");
        testTable.forEach(testTable1 -> {
            System.out.println(testTable1.getId()+testTable1.getStartDate());
        });
    }

查询结果如下:

 带有id查询条件的代码如下:

    @Test
    public void testTime4(){
        String str = "2022-6-20 18:29:35";
        Date date = TestUtils.appointTtime(str);
        String str2 = "2022-6-20 19:29:35";
        Date endDate = TestUtils.appointTtime(str2);
        Criteria criteria = new Criteria().and("_id").is("62a851ce1e4b7ab458527f031").andOperator(Criteria.where("startDate").gt(date),Criteria.where("startDate").lt(endDate));
        Query query = new Query();
        List<TestTable> testTable = mongoTemplate.find(query.addCriteria(criteria), TestTable.class, "testTable");
        testTable.forEach(testTable1 -> {
            System.out.println(testTable1.getId()+testTable1.getStartDate());
        });
    }

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值