IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 2021-09-04 -> 正文阅读

[大数据]2021-09-04

Java+mongodbTemplate聚合查询

第一次使用mongodbTemplate进行聚合查询踩得一些坑,废话不多说直接上代码:`

@ApiModel(value = "JdgParameterRuleDto", description = "测试类")
public class JdgParameterRuleDto implements Serializable {

    private static final long serialVersionUID = -7421289160530155401L;

    /**
     * 主键
     */
    @ApiModelProperty(name = "_id", value = "主键")
    private ObjectId _id;
    /**
     * 附表对应id
     */
    @ApiModelProperty(name = "test_id", value = "附表对应id")
    private String test_id;
    /**
     * 附表对应code
     */
    @ApiModelProperty(name = "par_channel_code", value = "附表对应code")
    private String test_code;
    /**
     * 判读级别(1:一级2:二级3:三级)
     */
    @ApiModelProperty(name = "sts_level", value = "判读级别(1:一级2:二级3:三级)")
    private Integer sts_level;
   
    private List<BasicParameter> basic_parameter;
}

注意事项:1.在java中对应的实体类字段一定要和mongodb中对应的表字段一模一样,否则返回值对象会因为字段名称不一场而查不到值
2.在上述实体类中除了basic_parameter这个List对象其余字段全部为主表字段,附表数据应该用List对象进行接收,否则查询不到相应数据
以下代码为mongodbTemplate的聚合查询代码:

/**
     * 多表联合查询,
     * @param <T>
     * @return
     */
    @Override
    public <T> List<T> relationQueryMoreToOne(Map<String, Object> paramMap, Class<T> entityClass) {
        LookupOperation lookup = LookupOperation.newLookup()
                //从表(关联的表)
                .from("basic_parameter")
                //主表中与从表相关联的字段
                .localField("test_id")
                //从表与主表相关联的字段
                .foreignField("test_id")
                //查询出的从表集合 命名(相当于从表的别名
                .as("basic_parameter");
        Aggregation aggregation = null;
        //主表查询条件可以给可以不给i
        AggregationOperation match = null;
        if(paramMap.get("par_channel_code") != null){
            Criteria ordercri = Criteria.where("par_channel_code").is(paramMap.get("par_channel_code").toString());
            match = Aggregation.match(ordercri);
            aggregation = Aggregation.newAggregation(match,lookup);
        }
        //次表查询条件可以给可以不给
        AggregationOperation match1 = null;
        if(paramMap.get("subsys_code") != null){
            Criteria ordercri1 = Criteria.where("subsys_code").is(paramMap.get("subsys_code").toString());
            match1 = Aggregation.match(ordercri1);
        }
        //查询条件
        if (match != null && match1 != null){
            aggregation = Aggregation.newAggregation(match,lookup,match1);
        }else if(match == null && match1 == null){
            aggregation = Aggregation.newAggregation(lookup);
        }else if(match != null && match1 == null){
            aggregation = Aggregation.newAggregation(match,lookup);
        }else if(match == null && match1 != null){
            aggregation = Aggregation.newAggregation(lookup,match1);
        }
//        List<AggregationOperation> operations = new ArrayList<>();
//        operations.add(lookup);
//        aggregation = Aggregation.newAggregation(operations);
//		entityClass这个参数为返回值对象即上边的JdgParameterRuleDto 
        AggregationResults<T> studentAggregation = mongoTemplate.aggregate(aggregation, "jdg_parameter_rule", entityClass);
        return (List<T>) studentAggregation.getMappedResults();
    }

以为就是mongodbTemplate的聚合查询,第一次写帖子,不喜勿喷。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-09-05 11:05:11  更:2021-09-05 11:06:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:58:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码