Конфликтующие результирующие наборы Java Spring MongoTemplate при запуске на CLI - PullRequest
0 голосов
/ 28 октября 2018

Я использую spring-data-mongodb:1.9.2.RELEASE, Java 8, Spring Data starter 1.4.0.RELEASE версию для запроса коллекции БД Монго следующего формата:

{ "_id" : "400000966", "_class" : "Student", "name" : "Arun", "programId" : 3, "approvalStatus" : "Approved", "auditTrails" : [ { "comment" : "Adding a Arun to program", "userName" : "sa", "date" : ISODate("2018-05-17T07:56:15.793Z") }, { "comment" : "Approved. ", "userName" : "da", "date" : ISODate("2018-07-17T08:04:45.120Z") }, { "comment" : "Updated student fee", "userName" : "sa", "date" : ISODate("2018-10-17T10:58:53.204Z") } ] }, { "_id" : "400000967", "_class" : "Student", "name" : "Shobhit", "programId" : 3, "approvalStatus" : "Approved", "auditTrails" : [ { "comment" : "Adding another", "userName" : "sa", "date" : ISODate("2018-10-17T11:11:45.060Z") }, { "comment" : "Updated to valid program", "userName" : "sg", "date" : ISODate("2018-10-22T13:13:09.032Z") }, { "comment" : "Approved. ", "userName" : "da", "date" : ISODate("2018-10-22T13:13:50.708Z") } ] }

Теперь я пытаюсь запросить всех студентов, которые были обновлены послеопределенное время, вот как выглядит мой запрос mongodb cli:

db.students.find({"auditTrails.date" :  { $gt: ISODate("2018-10-22 07:56:15.793Z") } })

Я ожидаю, что я должен получить всех студентов, для которых auditTrails.[date] больше указанной даты, и он выполняет именно то, что янужно этоТеперь давайте перейдем к Spring MongoTemplate, где я использую следующий код для запроса (или преобразования вышеуказанного запроса CLI в код Java)

List<Student> students = mongoTemplate.find(
                query(where("auditTrails.date")
                        .gte(LocalDateTime.ofInstant(offerGetRequest.getUpdatedAfter(), ZoneId.systemDefault())) ),
                Student.class);

Блок кода выполняется, но с совершенно другими критериями для MongoDB, свойти в консоль: find using query: { "auditTrails.date": { "$gte" : { "$date" : "2018-10-22T07:56:15.793Z"}}} fields: null for class: class Student in collection: students]

Java-код дает все документы, дата которых превышает указанную дату, что отличается от того, что я получаю из консоли MongoDB.Может ли кто-нибудь помочь мне найти эквивалент mongoTemplate запроса, который я запускаю на консоли.Я пытался использовать Criteria API, но он перевел бы что-то, что вернуло бы только тот документ, у которого дата всех вложенных документов больше указанной.Кроме того, BasicQuery будет ожидать документ JSON, а не BSON, поэтому ISODate в строке не сможет выполнить синтаксический анализ.

Спасибо за любые указатели.

...