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

mar*_*den 2 java mongodb spring-data-mongodb spring-boot

我有一个使用 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

@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);
    }
}
Run Code Online (Sandbox Code Playgroud)

mar*_*den 5

我想我找到了答案,除了从java端截断我的 LocalDateTime 之外,我可能没有什么可以做的(正如我在上一条评论中所解释的并在下面描述的那样)

Clock millisecondClock = Clock.tick(Clock.systemDefaultZone(), Duration.ofNanos(1000000)); 
LocalDateTime d = LocalDateTime.now(millisecondClock);
Run Code Online (Sandbox Code Playgroud)

当我遇到以下声明(回答了我的问题)时,我正在阅读 Baeldung 的文章https://www.baeldung.com/spring-data-mongodb-zoneddatetime :

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

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