mongodb 时间格式的转换

mongodb内置的时间类是ISODate,当我们使用springdatamongo的时候,Spring 会将java.util.Date一直对应
而要想在数据库中对时间格式做相互转换的话,要注意时以下问题

new Date()

可以接受多种参数,如:

  • YYYY-mm-dd
  • YYYY-mm-ddTHH:MM:ss.
  • YYYY-mm-ddTHH:MM:ssZ
  • integer
  • 标准时间格式

默认返回ISODate格式的时间, 时区是UTC

ISODate("2017-10-23T09:20:13Z")

Date()

默认返回当前时间,格式为当地标准时间格式

mongodb 中聚合查询可对时间做些处理

org.springframework.data.mongodb.core.aggregation.DateOperators

这是springdatamongodb对于时间类的方法类

public static Aggregation makeQuery(UserTrendDTO dto, String type) {
      List<AggregationOperation> list = new ArrayList<>();
      if (dto.getEndTime() != null) {
          list.add(new MatchOperation(Criteria.where("createTime").lte(dto.getEndTime())));
      }
      if (dto.getStartTime() != null) {
          list.add(new MatchOperation(Criteria.where("createTime").gte(dto.getStartTime())));
      }
      if (StringUtils.isNotBlank(dto.getObjectId())) {
          list.add(new MatchOperation(Criteria.where("objectId").is(dto.getObjectId())));
      }
      if (StringUtils.isNotBlank(dto.getPath())) {
          list.add(new MatchOperation(Criteria.where("path").is(dto.getPath())));
      }
      if (StringUtils.isNotBlank(dto.getSuperId())) {
          list.add(new MatchOperation(Criteria.where("superId").is(dto.getSuperId())));
      }
      if (StringUtils.isNotBlank(dto.getSuperType())) {
          list.add(new MatchOperation(Criteria.where("superType").is(dto.getSuperType())));
      }
      if (StringUtils.isNotBlank(dto.getType())) {
          list.add(new MatchOperation(Criteria.where("type").is(dto.getType())));
      }
      if ("path".equals(type)) {
          list.add(Aggregation.project("path", "createTime").and("_id").as("id"));
          list.add(Aggregation.group("path").count().as("total"));
          list.add(Aggregation.project("total").and("_id").as("path"));
          list.add(Aggregation.sort(Sort.Direction.DESC, "path"));
      } else {
          list.add(Aggregation.project("createTime").and(
                  DateOperators.DateToString.dateOf("createTime").toString("%Y-%m-%d")
          ).as("date")
                  .and("_id").as("id"));
          list.add(Aggregation.group("date").count().as("total"));
          list.add(Aggregation.project("total").and("_id").as("createTime"));
          list.add(Aggregation.sort(Sort.Direction.ASC, "createTime"));
      }
      Aggregation aggregation = Aggregation.newAggregation(
              list.toArray(new AggregationOperation[list.size()])

      );
      return aggregation;
  }
public List<UserTrendEntity> findAllForLine(UserTrendDTO dto, String type) {
      Aggregation aggregation = makeQuery(dto, type);
      AggregationResults<UserTrendEntity> results = mongoTemplate.aggregate(aggregation,
              "user_collect", UserTrendEntity.class);
      return results.getMappedResults();
  }

推荐阅读更多精彩内容

  • SwiftDate概况 从Swift发布起,我们就没有放弃使用Swift。 当然,我们希望在项目能够轻松自如地管理...
    Mee_Leo阅读 4,074评论 1 10
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 3,302评论 0 8
  • 在iOS开发中,经常会遇到各种各样的时间问题,8小时时差,时间戳,求时间间隔,农历等等。解决办法网上比比皆是,但大...
    真巧了_嘿阅读 999评论 5 6
  • 抄自http://javascript.ruanyifeng.com/stdlib/date.html概述Date...
    xuziang111阅读 1,339评论 0 1
  • 时区 GMT(Greenwich Mean Time):格林尼治时间,格林尼治标准时间的正午是指当太阳横穿格林尼治...
    程序汪丶阅读 118评论 0 1