MongoDB обрезает наносекунды LocalDateTime, когда MongoTemplate сохраняет данные - PullRequest
1 голос
/ 30 января 2020

У меня есть проект Spring Boot 2, использующий MongoDB в качестве базы данных.

Когда я создаю экземпляр объекта, содержащего дату, как LocalDateTime, вызывая LocalDateTime.now (); Я получаю дату-время, содержащее наносекунды с более чем 4 числовыми местами.

Когда я сохраняю эти данные в mongoDB с помощью mongotemplate.save, значение сохраняется, содержащее 3 места только для наносекунд (остальное заполнено нулями). Итак, как я могу достичь sh такой же точности при сохранении в БД? Или другой вариант: как бы я ограничил точность при создании экземпляра LocalDateTime в java?

@Document("Entity")
public class Entity implements Serializable {

    @Id
    private String id;

    @Indexed(name = "created")
    private LocalDateTime created;

    public HistoryEntity(){
        // This gives me 2020-01-30T13:25:09.817182
        this.created = LocalDateTime.now();
    }
}

@Repository
public class DAO {

    @Autowired
    private MongoTemplate mongoTemplate;


    public void save(Entity e) {
        // When value is persisted, I get 2020-01-30T13:25:09.817 if I look into mongoDB instance or if I retrieve the same entity from DB in Java
        Entity saved = mongoTemplate.save(e);
    }
}

1 Ответ

0 голосов
/ 30 января 2020

Я думаю, что нашел ответ, и, вероятно, я мало что могу сделать, кроме как обрезать свой LocalDateTime со стороны java (как я объяснил в моем последнем комментарии и изображен ниже)

Clock millisecondClock = Clock.tick(Clock.systemDefaultZone(), Duration.ofNanos(1000000)); 
LocalDateTime d = LocalDateTime.now(millisecondClock);

Я читал эту статью Baeldung https://www.baeldung.com/spring-data-mongodb-zoneddatetime, когда столкнулся со следующим утверждением (ответившим на мой вопрос):

... мы удаляем информацию о наносекундах, так как Тип даты MongoDB имеет точность в миллисекундах:

Вот и все. Даже если я хочу работать с более высокой точностью, кажется, что MongoDB не может справиться с этим (по крайней мере сейчас)

...