Java Spring Data Mongo:如何只保存日期,即不保存时间

Java Spring Data Mongo:如何只保存日期,即不保存时间,java,spring-data-mongodb,Java,Spring Data Mongodb,在其中一个集合中,我有一个字段需要设置为当前日期,例如“2018-01-26”。它不应该包含任何时间。这使得我可以轻松地根据日期查询文档。我试过下面的代码,它总是保存日期和时间 @DateTimeFormat(iso= DateTimeFormat.ISO.DATE_TIME) private Date journeyDate; 或 如何在数据库中只保存日期部分?您不能在Mongo中将日期设置为“2018-01-26”。因为无论我们做什么转换,最终我们都需要创建一个日期对象来保存在Mongo

在其中一个集合中,我有一个字段需要设置为当前日期,例如“2018-01-26”。它不应该包含任何时间。这使得我可以轻松地根据日期查询文档。我试过下面的代码,它总是保存日期和时间

 @DateTimeFormat(iso= DateTimeFormat.ISO.DATE_TIME)
private Date journeyDate;


如何在数据库中只保存日期部分?

您不能在Mongo中将日期设置为“2018-01-26”。因为无论我们做什么转换,最终我们都需要创建一个日期对象来保存在Mongo中。没有时间,日期对象就不能存在

但是,您可以通过编写自定义转换器并注册它来控制存储的内容。
在这个转换器中,我所做的是截短一天开始的所有日期,这意味着所有日期的时间都设置为00:00:00(不考虑它们的时间)。这样你就可以在所有的日子里都有相同的时间。我希望这将有助于编写您需要的查询

@Configuration
public class MongoConverterConfig
{

  @Bean
  public CustomConversions dateConversions()
  {
    List<Converter<?, ?>> converterList = new ArrayList<Converter<?, ?>>();
    converterList.add(new DateConverter());
    return new CustomConversions(converterList);
  }

  @WritingConverter
  static class DateConverter implements Converter<Date, Date> {

    @Override
    public Date convert(Date input) {
      if (input == null) {
        return null;
      }
      return Date.from(Instant.ofEpochMilli(input.getTime()).truncatedTo(ChronoUnit.DAYS));
    }
  }
}
@配置
公共类MongoConverterConfig
{
@豆子
公共自定义转换日期转换()
{
列表>();
add(newdateconverter());
返回新的CustomConversions(转换器列表);
}
@写转换器
静态类DateConverter实现转换器{
@凌驾
公共日期转换(日期输入){
如果(输入==null){
返回null;
}
返回日期.from(Instant.ofEpochMilli(input.getTime()).truncatedTo(ChronoUnit.DAYS));
}
}
}

如果您真的想在mongo中只存储“2018-01-26”,那么您必须将其存储为字符串,我不建议这样做。

您将日期另存为数据库中的日期,并在查询数据库时更改查询以将时间部分设置为0。这不像我认为的那样简单@pvpkiran+1
@Configuration
public class MongoConverterConfig
{

  @Bean
  public CustomConversions dateConversions()
  {
    List<Converter<?, ?>> converterList = new ArrayList<Converter<?, ?>>();
    converterList.add(new DateConverter());
    return new CustomConversions(converterList);
  }

  @WritingConverter
  static class DateConverter implements Converter<Date, Date> {

    @Override
    public Date convert(Date input) {
      if (input == null) {
        return null;
      }
      return Date.from(Instant.ofEpochMilli(input.getTime()).truncatedTo(ChronoUnit.DAYS));
    }
  }
}