• MongoDB使用Template查询数据


    1.用实体类查询

    1. @Document("AnalysisIndex")
    2. @Data
    3. public class AnalysisIndex implements Serializable {
    4. /**
    5. * id
    6. */
    7. @Field("_id")
    8. @ApiModelProperty(name = "id", value = "主键", hidden = false)
    9. private String id;
    10. /**
    11. * 公司id
    12. */
    13. @Field("company_id")
    14. @ApiModelProperty(name = "companyId", value = "公司id", hidden = false)
    15. private String companyId;
    16. /**
    17. * 时间
    18. */
    19. @Field("event_date")
    20. @ApiModelProperty(name = "eventDate", value = "时间", hidden = false)
    21. private String eventDate;
    22. /**
    23. * 全站流量
    24. */
    25. @Field("visit_pv")
    26. @ApiModelProperty(name = "visitPv", value = "全站流量", hidden = false)
    27. private String visitPv;
    28. /**
    29. * 全站流量
    30. */
    31. @Field("visit_nv")
    32. @ApiModelProperty(name = "visitNv", value = "全站流量", hidden = false)
    33. private String visitNv;
    34. /**
    35. * 总新增用户
    36. */
    37. @Field("visit_uv")
    38. @ApiModelProperty(name = "visitUv", value = "总新增用户", hidden = false)
    39. private String visitUv;
    40. /**
    41. * 注册用户数
    42. */
    43. @Field("visit_rv")
    44. @ApiModelProperty(name = "visitRv", value = "注册用户数", hidden = false)
    45. private String visitRv;
    46. /**
    47. * 平均访问时长
    48. */
    49. @Field("visit_duration")
    50. @ApiModelProperty(name = "visitDuration", value = "平均访问时长", hidden = false)
    51. private String visitDuration;
    52. }

    1. Criteria criteria = Criteria.where("event_date").gte(dateMap.get("from_date"))
    2. .lte(dateMap.get("to_date")).and("company_id").is(param.getCompanyId()).and("project").is(project);
    3. Query query=new Query();
    4. query.addCriteria(criteria);
    5. // 按创建时间倒序
    6. query.with(Sort.by(
    7. Sort.Order.desc("event_date")
    8. ));
    9. //查询的表在实体类里面
    10. List analysisIndices = mongoTemplate.find(query, AnalysisIndex.class);

    2.分组查询

    1. Criteria criteria = Criteria.where("event_date").gte(dateMap.get("from_date"))
    2. .lte(dateMap.get("to_date")).and("company_id").is(param.getCompanyId()).and("project").is(project);
    3. //查询的表在实体类里面
    4. //根据target_type分组,first就是取第一个字段,as就是返回的字段名称,count就是去分组的总数放入value里面 相当与 select target_type as key,count(target_type)as value group by target_type
    5. Aggregation aggregation = Aggregation.newAggregation(Aggregation.match(criteria),
    6. Aggregation.group("company_id")
    7. .first("company_id").as("company_id")
    8. .sum("visit_pv").as("visit_pv")
    9. .sum("visit_rv").as("visit_rv")
    10. .sum("visit_nv").as("visit_nv")
    11. .sum("event_date").as("event_date")
    12. .sum("visit_uv").as("visit_uv")
    13. .sum("visit_duration").as("visit_duration")
    14. //二个字段相乘 相加ArithmeticOperators.Add 相除ArithmeticOperators.Divide 相减ArithmeticOperators.Subtract
    15. .sum(ArithmeticOperators.Multiply.valueOf("visit_duration").multiplyBy("visit_uv")).as("duration"),
    16. Aggregation.sort(Sort.Direction.DESC, "event_date"));
    17. AggregationResults results = mongoTemplate.aggregate(aggregation, "AnalysisIndex",
    18. AnalysisIndex.class);
    19. List analysisIndices = results.getMappedResults();

  • 相关阅读:
    SpringBoot和MyBatis常见注解
    Spring 源码阅读(二)IoC 容器初始化以及 BeanFactory 创建和 BeanDefinition 加载过程
    不完全微分PD控制器(CODESYS源代码+算法详细介绍)
    K8S实战入门
    水质查询接口
    ✔ ★【备战实习(面经+项目+算法)】 10.13学习时间表
    react使用脚手架搭建
    点云配准学习路线及方法
    第11章 文件
    【js学习】闭包理解
  • 原文地址:https://blog.csdn.net/qq_38999509/article/details/126139015