We are running into issues retrieving MongoDB document using Spring JPA as it relates to MongoDB date field. Here is a document
{
"field1": "some value",
"field2": {
"field2sub1": "some value",
"field2datefield": ISODate(1234567890)
}
}
Java object:
@Data
class Dto {
private String field1;
private JsonNode field2;
}
Once we retireve the data, the Dto.field2 looks as follows:
{
"field2sub1": "some value",
"field2datefield": {$date: "2022-01-01....."}
}
The conversion is done correctly, except for what I need is
{
"field2sub1": "some value",
"field2datefield": 1234567890
}
without {$date: ....}.
The data is retrieved using this code:
List<Dto> eventRtrs = mongoTemplate.find(query, Dto.class, "collection_name")
Is there a way to specify that date fields need to be retrieved as a long or a formatted date and not as {$date ...} object?
UPDATE:
Potential solution I found was to recursively search the Document for any Date objects and convert them to Longs.
private void documentIterator(Map<String, Object> map) {
for(Map.Entry<String, Object> entry : map.entrySet()) {
// if the value is another map, search one level deeper
if (entry.getValue() instanceof Map) {
documentIterator((Map<String, Object>) entry.getValue());
}
// if the value is a Date, change it to a Long
else if(entry.getValue() instanceof Date) {
entry.setValue(((Date) entry.getValue()).getTime());
}
}
}
Ideally though, I would be able to have the ObjectMapper do this conversion when it is converting the Document to a JsonNode to avoid this traversal.