插入
字段类型为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());
});
}