MongoDB使用Template查询数据

1.用实体类查询

@Document("AnalysisIndex")
@Data
public class AnalysisIndex  implements Serializable {

    /**
     * id
     */
    @Field("_id")
    @ApiModelProperty(name = "id", value = "主键", hidden = false)
    private String id;

    /**
     * 公司id
     */
    @Field("company_id")
    @ApiModelProperty(name = "companyId", value = "公司id", hidden = false)
    private String companyId;

    /**
     * 时间
     */
    @Field("event_date")
    @ApiModelProperty(name = "eventDate", value = "时间", hidden = false)
    private String eventDate;


    /**
     * 全站流量
     */
    @Field("visit_pv")
    @ApiModelProperty(name = "visitPv", value = "全站流量", hidden = false)
    private String visitPv;

    /**
     * 全站流量
     */
    @Field("visit_nv")
    @ApiModelProperty(name = "visitNv", value = "全站流量", hidden = false)
    private String visitNv;

    /**
     * 总新增用户
     */
    @Field("visit_uv")
    @ApiModelProperty(name = "visitUv", value = "总新增用户", hidden = false)
    private String visitUv;


    /**
     * 注册用户数
     */
    @Field("visit_rv")
    @ApiModelProperty(name = "visitRv", value = "注册用户数", hidden = false)
    private String visitRv;


    /**
     * 平均访问时长
     */
    @Field("visit_duration")
    @ApiModelProperty(name = "visitDuration", value = "平均访问时长", hidden = false)
    private String visitDuration;
    
}

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

2.分组查询

Criteria criteria = Criteria.where("event_date").gte(dateMap.get("from_date"))
                    .lte(dateMap.get("to_date")).and("company_id").is(param.getCompanyId()).and("project").is(project);

            //查询的表在实体类里面
            //根据target_type分组,first就是取第一个字段,as就是返回的字段名称,count就是去分组的总数放入value里面 相当与 select target_type as key,count(target_type)as value group by target_type
            Aggregation aggregation = Aggregation.newAggregation(Aggregation.match(criteria),
                    Aggregation.group("company_id")
                            .first("company_id").as("company_id")
                            .sum("visit_pv").as("visit_pv")
                            .sum("visit_rv").as("visit_rv")
                            .sum("visit_nv").as("visit_nv")
                            .sum("event_date").as("event_date")
                            .sum("visit_uv").as("visit_uv")
                            .sum("visit_duration").as("visit_duration")
                            //二个字段相乘  相加ArithmeticOperators.Add  相除ArithmeticOperators.Divide 相减ArithmeticOperators.Subtract
                           .sum(ArithmeticOperators.Multiply.valueOf("visit_duration").multiplyBy("visit_uv")).as("duration"),
                    Aggregation.sort(Sort.Direction.DESC, "event_date"));
            AggregationResults<AnalysisIndex> results  = mongoTemplate.aggregate(aggregation, "AnalysisIndex",
                    AnalysisIndex.class);
            List<AnalysisIndex> analysisIndices = results.getMappedResults();

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值