MongoTemplate保留数据时,MongoDB截断LocalDateTime纳秒

问题描述 投票:0回答:1

我有一个使用MongoDB作为数据库的Spring Boot 2项目。

当我通过调用LocalDateTime.now()实例化包含日期为LocalDateTime的对象时;我收到一个包含纳秒的日期时间,其中包含4个以上的数字位置。

当我使用mongotemplate.save将数据持久保存在mongoDB中时,该值仅包含3个纳秒的位置(其余位置填充为零)。那么,在存储到数据库时如何实现相同的精度?或另一个选择:在Java中创建LocalDateTime实例时如何限制精度?

@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);
    }
}
java mongodb spring-boot spring-data-mongodb
1个回答
0
投票

我想我已经找到了答案,除了从Java端截断LocalDateTime之外,我别无他法(正如我在上一条评论中所解释,并在下面描述的那样)

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

[当我面对以下陈述(回答了我的问题)时,我正在阅读这篇Baeldung的文章https://www.baeldung.com/spring-data-mongodb-zoneddatetime

...我们正在删除纳秒信息,因为MongoDB Date类型的精度为毫秒:

就这样。即使我想以更高的精度工作,似乎MongoDB也无法处理它(至少现在如此)

© www.soinside.com 2019 - 2024. All rights reserved.