栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

mongo+java 连表排序、条件、分页查询问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

mongo+java 连表排序、条件、分页查询问题

*注释:mongo 连表查询条件----mongoDB版本3.2以上

开始之前先说一下我的背景吧。做一个管理系统类似的项目,因为项目是借鉴了其他公司的项目,所以数据库也沿用了。因为mongoDB跟mysql不同,它是文档型数据库,单表是随心所欲的,但是涉及到多表操作就有点懵了。不过嘛,秉着不畏艰难的信念,然后,就开始了,哈哈。


1、软件版本

mongoDB:4.2.1(命令:db.version();noSqlBootster可以直接执行)springBoot统一版本:2.3.2 2、步骤

连表条件:两个表联合查询,用从表的某个字段排序,从表查询条件,分页

1、关联表:

LookupOperation lookup = LookupOperation.newLookup().from("base_users").localField("user_id").foreignField("_id").as("user"); 

斜体样式*base_user是从表,localField里面是主表里面关联 base_user的字段,oreignField里面是从表的字段

关联字段数据看类型需要完全一致,不一致需要转换:

AddFieldsOperation addFieldsOperation = AddFieldsOperation.addField("user_id").withValue(ConvertOperator s.ToObjectId.toObjectId("$user_id")).build();
2、查询

查询行数:

Aggregation countAgg = Aggregation.newAggregation(
         Aggregation.match(criteria),
         addFieldsOperation,
         lookup,
         Aggregation.group("_id:null").count().as("count")
 );
 AggregationResults resultCount = mongoTemplate.aggregate(countAgg, "base_role", Map.class);
 List countList = resultCount.getMappedResults();
 long count = 0L;
 if (countList.size() > 0) {
     count = Long.parseLong(countList.get(0).get("count").toString());
 }

查询具体数据

//查询具体数据
Aggregation agg = Aggregation.newAggregation(
        Aggregation.match(criteria),
        addFieldsOperation,
        lookup,
        Aggregation.unwind("user"),
        Aggregation.project("_id", "user_id", "name", "created_at", "created_by", "updated_at", "updated_by")
                .andInclude("user.name", "user.age"),
        Aggregation.sort(Sort.Direction.ASC, "age"),
        Aggregation.skip(pageable.getOffset()),
        Aggregation.limit(pageable.getPageSize())
);
AggregationResults subFields = mongoTemplate.aggregate(agg, "base_role", baseRole.class);

查询条件自定义,可以直接使用从表user.属性方式直接参与查询

好了,到这里就大功告成了。最后说一下我踩了的坑吧,agg里面放的顺序对查询结果是会有影响的,具体的可以看官网文档或者百度。

欢迎各位大佬提出宝贵的意见!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/710139.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号