MongoRepository @Query Не удалось проанализировать строку как дату - PullRequest
1 голос
/ 22 марта 2019

Прежде всего, моя проблема заключается в поиске коллекций в MongoDB с помощью Spring JPA (MongoRepository).

Мой объект:

{
    "_id" : ObjectId("5c78e1f447f39c2eacb229d7"),
    "lab" : "xxx",
    "type" : "Holiday",
    "description" : "Lunar New Year",
    "start_date" : ISODate("2019-02-04T02:37:42.152Z"),
    "end_date" : ISODate("2019-02-08T06:37:42.152Z"),
    "all_day" : true,
    "_class" : "xxx.Event"
}

Я могу сделать как угодно в запросе Монго:

db.getCollection('event').find({"start_date" : {$gte :ISODate( "2019-02-03T02:37:42.152Z") , $lte :ISODate( "2019-02-08T02:37:42.152Z")}})

(вы можете заменить ISODate на новую дату)

Но чтобы сделать это весной, я хочу сделать это так:

@Query("   $or: [ {start_date : {$gte :ISODate( ?0 ) , $lte :ISODate( ?1)}} , {end_date : {$gte :ISODate( ?0) , $lte :ISODate( ?1)}} ]  }  ")
List<Event> findAllEventByTime(String from, String to);

Но это не получитсяЯ искал в двух темах: здесь и там

и в итоге получилось

@Query("{ 'start_date' : {$gte : {'$date': '?0'}, $lte :{'$date': '?1'} }}")
List<Event> findAllEventByTime(String from, String to);

Но снова у меня возникла проблема сСинтаксический анализ:

2019-03-22 10: 09: 48.261 ОШИБКА 9316 --- [XNIO-2 task-1] ozproblem.spring.common.AdviceTrait: Внутренняя ошибка сервера

org.bson.json.JsonParseException: не удалось проанализировать строку как дату в org.bson.json.JsonReader.visitDateTimeExtendedJson (JsonReader.java:1057)

Я пытаюсь с рекомендацией:

Попробуйте параметр: пт. 22 марта 10:09:48 ИКТ 2019 и 2019-03-22T03: 09: 48.227Z и 2016-04-14 00: 00: 00

Все это идет вниз... Можете ли вы, ребята, помочь мне исправить это?

Рабочий процесс: параметры из FE (String) ~> Перейти к BE ~> Call Repo, как указано выше

Ответы [ 2 ]

1 голос
/ 22 марта 2019

Вы можете сделать spring data jpa метод таким же, как показано ниже: -

List<Event>  findByStart_dateIsAfterAndEnd_dateIsBefore(Date startDate, Date endDate);
0 голосов
/ 02 мая 2019

Я разрешаю это другим методом:

  1. В хранилище
    • Я не могу конвертировать с необработанным запросом или любым запросом, который нужно преобразовать из строки в дату
    • Использовать поддержку автоматического создания запросов MongoRepository
Page<Event> findAllByStartDateBetweenOrEndDateBetween(Instant fromDate1, Instant toDate1, Instant fromDate2, Instant toDate2, Pageable pageable);
    List<Event> findAllByStartDateBetweenOrEndDateBetween(Instant fromDate1, Instant toDate1, Instant fromDate2, Instant toDate2);
  1. Входные данные: Используйте Instant или LocalDate / LocalDateTime и конвертируйте его в Instant ~> Затем использовать в качестве параметра в запросе (автоматическое преобразование по Spring)
@RequestParam Instant startDate, @RequestParam Instant endDate

и использование:

eventRepository.findAllByStartDateBetweenOrEndDateBetween(startDate, endDate, startDate, endDate))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...