найти по сегодняшней дате, используя данные Spring либо @Query в mongorepository, либо Mongooperations, либо mongotemplate

Я пытаюсь получить все записи, которые были созданы на сегодняшний день из mongodb, используя mongorepository, mongooperations или mongotemplate. Я хочу сопоставить все записи только по дате, а не по временным меткам. Пожалуйста, обратитесь к моим входам mongodb ниже.

/* 1 */
{
"_id" : ObjectId("59135f13fc90f22b00c91df2"),
"_class" : "com.vistors.management.domains.EmployeeVisitor",
"checkedIn" : true,
"checkedInDate" : ISODate("2017-05-10T18:42:27.630Z"),
"visitor" : {
    "$ref" : "VISITOR",
    "$id" : ObjectId("59135f13fc90f22b00c91def")
},
"employee" : {
    "$ref" : "EMPLOYEE",
    "$id" : ObjectId("59135f13fc90f22b00c91df0")
}
}

/* 2 */
{
"_id" : ObjectId("59135f13fc90f22b00c91df3"),
"_class" : "com.vistors.management.domains.EmployeeVisitor",
"checkedIn" : true,
"checkedInDate" : ISODate("2017-05-10T18:42:27.638Z"),
"visitor" : {
    "$ref" : "VISITOR",
    "$id" : ObjectId("59135f13fc90f22b00c91dee")
},
"employee" : {
    "$ref" : "EMPLOYEE",
    "$id" : ObjectId("59135f13fc90f22b00c91df0")
}
}

/* 3 */
{
"_id" : ObjectId("5913ec9eafeb7a1e8df79d5f"),
"_class" : "com.vistors.management.domains.EmployeeVisitor",
"checkedIn" : true,
"checkedInDate" : ISODate("2017-05-11T04:46:22.425Z"),
"visitor" : {
    "$ref" : "VISITOR",
    "$id" : ObjectId("59135f13fc90f22b00c91dee")
},
"employee" : {
    "$ref" : "EMPLOYEE",
    "$id" : ObjectId("59135f13fc90f22b00c91df0")
}
}

Я хочу получить все входы из базы данных, которые совпадают с checkedInDate в качестве сегодняшней даты, например:

@Query("{'checkedInDate': {$gte: ?0, $lte:?0 }}")
List<EmployeeVisitor> findAllCheckedInToday(ZonedDateTime date)

or

@Override
public List<EmployeeVisitor> getTodayRecords() {

//Date date = Date.from(instant);

    Query query = new Query().addCriteria(Criteria.where("checkedInDate").is(new Date()));
    return mongoTemplate.find(query, EmployeeVisitor.class);

    //Criteria.where("expenseDate").gte(calendar1.getTime()).lte(calendar2.getTime()).and("userid").is(uid);}
}

Но мне не удалось добиться требуемого результата, я не могу понять, как я могу запросить из базы данных с датой, а не с датой с меткой времени.

Спасибо за вашу помощь.

Джитендер


person Jitender    schedule 11.05.2017    source источник


Ответы (2)


Продолжая то, что предложил @Veeram. Это то, что ты можешь сделать,

ZonedDateTime today = ZonedDateTime.of(LocalDate.now(), LocalTime.MIDNIGHT, ZoneId.systemDefault());
ZonedDateTime tomorrow = today.plusDays(1);  
repository.finByCheckedInDateBetween(Date.from(today.toInstant()), Date.from(tomorrow.toInstant()));  

И вы можете изменить свой метод репозитория на что-то вроде этого

finByCheckedInDateBetween(Date from, Date to)
person pvpkiran    schedule 11.05.2017
comment
О .. Да, это работает очень хорошо, спасибо pvpkiran и Veeram - person Jitender; 12.05.2017

вы можете изменить свой метод репозитория на что-то вроде этого:

List<EmployeeVisitor> findByCheckedInDate(ZonedDateTime date)
person Yosra ADDALI    schedule 16.09.2018