美文网首页
mongodb 时间格式的转换

mongodb 时间格式的转换

作者: 谁在烽烟彼岸 | 来源:发表于2019-10-30 18:53 被阅读0次

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();
  }

相关文章

网友评论

      本文标题:mongodb 时间格式的转换

      本文链接:https://www.haomeiwen.com/subject/ujravctx.html