我数据库中有这样一条数据
{
"_id": "ce421365d7a529c229a83b20a56ed50c",
" vin":"1101165230",
"dataTime": ISODate("2021-07-01T09:32:38.000Z"),
"electronicFenceAlarmFlag": true
}
我的要用时间作为查询条件之一但是怎么都查询不出来。
{"vin":"1G1BL52P7TR115520","dataTime":1625103158000,"alarmFlag":true}
Criteria criteria = new Criteria();
//毫秒数 1625103158000
//就是这个条件-加上就没有数据 转换后:2021-07-01T09:32:38.000Z
criteria.and("dataTime").is(getISO8601Timestamp(new Date(dataTime)));
//单独用下面条件就有,加上时间条件就没有
criteria.and("vin").is(vin);
criteria.and("electronicFenceAlarmFlag").is(true);
Sort sort = Sort.by(Sort.Order.desc("dataTime"));
Query query = new Query(criteria).with(sort);
VehicleHistoryData one = vehicleHistoryDataDao.findOne(query);
criteria.andOperator 新建一个criteria用于组装时间查询条件,然后andOperator拼起来试试看,可以百度下andOperator操作怎么使用,另外无需手动转成ISO时间格式,直接使用Date就好,MongoDB存储的时候自己会转换的
dateTime 查询条件弄错了,不用转换成long类型的Timestampe,直接用Java8 的LocalDateTime类型即可,springdata mongodb 提供了converter的,查询到时候会自动转换,你只需要确保时间是UTC时间能对上即可。