使用MongoTemplate 对 mongodb数据进行分组、排序、分页、连表查询

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
推荐全链路深度定制开发平台,高级版 1个月
简介: 使用MongoTemplate 对 mongodb数据进行分组、排序、分页、连表查询

1、普通查询条件

Criteria criteria = new Criteria();
            if (status == 2){ // 全部
                criteria = Criteria.where("status").ne(StatusEnum.DELETED);
            }else if (status == SolitaireConstant.LAUNCH){ // 我发起的
                criteria = Criteria.where("userId").is(userId).and("status").ne(StatusEnum.DELETED);
            }
            Query queryPage = new Query(criteria);
            queryPage.with(Sort.by(Sort.Order.desc("createTime"))).skip((long) page.getCurrent() * page.getSize()).limit(page.getSize()); //分页
            List<StartSolitaireVO> list = mongoTemplate.find(queryPage, StartSolitaireVO.class,SolitaireConstant.START_SOLITAIRE_COLLECTION);

2、聚合查询(分组、排序、分页、连表)

// 连表
LookupOperation lookup = LookupOperation.newLookup()
                    // 关联的从表名字
                    .from(SolitaireConstant.START_SOLITAIRE_COLLECTION)
                    // 主表中什么字段与从表相关联
                    .localField("startSolitaireId")
                    // 从表中的什么字段与主表相关联
                    .foreignField("_id")
                    // 自定义的从表结果集名  与主表关联的数据归于此结果集下
                    .as("startVO");
            Criteria criteria = new Criteria();
            // 主表可能选择的条件
            criteria.and("userId").is(userId);
            // 从表可能选择的条件
            criteria.and("startVO.status").ne(StatusEnum.DELETED);
            // 将筛选条件放入管道中
            Aggregation aggregation = Aggregation.newAggregation(
                    lookup,
                    Aggregation.match(criteria),
                    Aggregation.group("startSolitaireId") // 分组的字段
                            .first("startSolitaireId").as("startSolitaireId")  // 映射的字段 并取别名
                            .first("userId").as("userId")
                            .first("interact").as("interact")
                            .first("createTime").as("createTime")
                            .first("startVO").as("startVO"),
                    Aggregation.sort(Sort.Direction.DESC,"createTime"), // 排序
                    Aggregation.skip((long) page.getCurrent() * page.getSize()),
                    Aggregation.limit(page.getSize())); // 分页
            AggregationResults<MySolitaireVO> aggregate = mongoTemplate.aggregate(aggregation, SolitaireConstant.MY_SOLITAIRE_COLLECTION, MySolitaireVO.class);
            List<MySolitaireVO> mappedResults = aggregate.getMappedResults();


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
2月前
|
存储 NoSQL MongoDB
掌握MongoDB索引优化策略:提升查询效率的关键
在数据库性能调优中,索引是提升查询效率的利器。本文将带你深入了解MongoDB索引的内部工作原理,探讨索引对查询性能的影响,并通过实际案例指导如何针对不同的查询模式建立有效的索引。不仅将涵盖单一字段索引,还会探讨复合索引的使用,以及如何通过分析查询模式和执行计划来优化索引,最终实现查询性能的最大化。
|
2月前
|
存储 NoSQL MongoDB
数据的存储--MongoDB文档存储(二)
数据的存储--MongoDB文档存储(二)
62 2
|
2月前
|
存储 NoSQL MongoDB
MongoDB 查询分析
10月更文挑战第21天
14 1
|
2月前
|
NoSQL MongoDB 索引
MongoDB 覆盖索引查询
10月更文挑战第21天
27 1
|
2月前
|
NoSQL Java MongoDB
MongoDB 排序
10月更文挑战第16天
28 4
|
2月前
|
SQL NoSQL MongoDB
MongoDB 查询文档
10月更文挑战第15天
17 1
|
2月前
|
NoSQL MongoDB 数据库
使用NimoShake将数据从AWS DynamoDB迁移至阿里云MongoDB
使用NimoShake将数据从AWS DynamoDB迁移至阿里云MongoDB
|
2月前
|
存储 NoSQL 关系型数据库
数据的存储--MongoDB文档存储(一)
数据的存储--MongoDB文档存储(一)
74 3
|
2月前
|
人工智能 NoSQL 机器人
MongoDB Atlas与YoMio.AI近乎完美适配:推理更快速、查询更灵活、场景更丰富
随着MongoDB的新发布和革新,YoMio.AI的“闪电式发展”值得期待。
|
1月前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第21天】本文探讨了MongoDB Atlas的核心特性、实践应用及对云原生数据库未来的思考。MongoDB Atlas作为MongoDB的云原生版本,提供全球分布式、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了云原生数据库的未来趋势,如架构灵活性、智能化运维和混合云支持,并分享了实施MongoDB Atlas的最佳实践。