Tout d'abord, mon problème est de rechercher des collections dans MongoDB via Spring JPA (MongoRepository).
Mon objet:
@Query("{ 'start_date' : {$gte : {'$date': '?0'}, $lte :{'$date': '?1'} }}") List<Event> findAllEventByTime(String from, String to);
Je peux faire ce que je souhaite dans Mongo requête comme:
@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);
(vous pouvez remplacer ISODate par une nouvelle date)
Mais pour le faire au printemps, je veux le faire comme: p>
db.getCollection('event').find({"start_date" : {$gte :ISODate( "2019-02-03T02:37:42.152Z") , $lte :ISODate( "2019-02-08T02:37:42.152Z")}})
Mais ça a échoué, j'ai cherché dans deux sujets: ici et là-bas
et finir avec
{ "_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" }
Mais encore une fois, j'ai eu un problème avec l'analyse:
2019-03-22 10: 09: 48.261 ERREUR 9316 --- [XNIO-2 task-1] o.z.problem.spring.common.AdviceTrait: Erreur de serveur interne
org.bson.json.JsonParseException: échec de l'analyse de la chaîne en tant que date à org.bson.json.JsonReader.visitDateTimeExtendedJson (JsonReader.java:1057)
J'essaye avec recomment:
Try param: Fri Mar 22 10:09:48 ICT 2019 and 2019-03-22T03: 09: 48.227Z and 2016-04-14 00 : 00: 00
Tout ça se passe ... Pouvez-vous m'aider à résoudre ce problème?
Work-Flow: Params from FE (String) ~> Go to BE ~> Call Repo comme ci-dessus
3 Réponses :
Vous pouvez créer la méthode spring data jpa
pour la même chose comme ci-dessous: -
List<Event> findByStart_dateIsAfterAndEnd_dateIsBefore(Date startDate, Date endDate);
J'essaye: List
merci pour votre suggestion, je teste jusqu'au bout et finis par utiliser la conversion automatique de Spring Data JPA, mais nous devons changer le type
Je le résous avec une autre méthode:
eventRepository.findAllByStartDateBetweenOrEndDateBetween(startDate, endDate, startDate, endDate))
@RequestParam Instant startDate, @RequestParam Instant endDate
et utilisez:
Page<Event> findAllByStartDateBetweenOrEndDateBetween(Instant fromDate1, Instant toDate1, Instant fromDate2, Instant toDate2, Pageable pageable); List<Event> findAllByStartDateBetweenOrEndDateBetween(Instant fromDate1, Instant toDate1, Instant fromDate2, Instant toDate2);
J'ai eu le même problème lors de l'analyse des dates dans la requête json. C'était un bug dans Spring Data Mongo. La solution consiste à mettre à niveau le parent de démarrage de printemps dans le projet:
<parent> <artifactId>spring-boot-starter-parent</artifactId> <groupId>org.springframework.boot</groupId> <version>2.2.1.RELEASE</version> </parent>
La version 2.2.1.RELEASE corrige le problème.