Я использую 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 в строке не сможет выполнить синтаксический анализ.
Спасибо за любые указатели.