iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >java操作mongodb之多表联查的实现($lookup)
  • 349
分享到

java操作mongodb之多表联查的实现($lookup)

2024-04-02 19:04:59 349人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

最近在开发的过程中,一个列表的查询,涉及到了多表的关联查询,由于持久层使用的是mongoDB,对这个非关系型数据使用的不是很多,所以在实现此功能的过程中出现了不少问题,现在此做记录,

最近在开发的过程中,一个列表的查询,涉及到了多表的关联查询,由于持久层使用的是mongoDB,对这个非关系型数据使用的不是很多,所以在实现此功能的过程中出现了不少问题,现在此做记录,一为加深自己的理解,以后遇到此类问题可以快速的解决,二为遇到同样问题的小伙伴提供一点小小的帮助。

全文分为两部分:

  1. 使用robo3t编写多表关系的查询语句
  2. 将编写的查询语句整合到java项目

多表联查的查询语句:

此处使用的为monGodb的robo3t可视化工具,先说下需求:从A(假如说是日志表)表中查询出符合条件的数据,根据A表中符合条件数据查询B(假如说是信息表)表中的数据,此处也可以将B表的查询条件加入进来(类型于关系型数据库中的临时表)

mongo查询语句:


db.getCollection('A').aggregate([
    {
    $lookup:{
          from:'B',
          localField:'userid',
          foreignField:'userid',
          as:'userinfo'
        }
    }, 
    {
     $unwind:'$userrole'//把一个数组展成多个,就比如说按多表连查的userrole数组中有10数据,那么用$unwind将把一条带数组的数据分成10条,这10条数据除了userrole不同之外,其它数据都是相同的,就类似于一个展开操作
    },
    {
     $match:{'username':'zhangsan'}
    },
    {
     $group:{
          _id:{
              userid:'$userid',//这个属性必须是要A表中有的
              userrole:'$userrole.roleid',//A表中有一个集合,里面存放的对象有一个名为roleid的属性
            },
          operateTime:{
              $last:'$operateTime'//取A表操作时间最后一条件数
            }
          info:{
              $first:'$userinfo'//因为数组的扩展,造成了大量的重复数据(只有userrole不同),$first是只取最新的一条
            }
        }
    },
    {
      $sort:{'operateTime':-1}//操作时间倒序,-1:倒序,1:升序
    },
    {
      $skip:0//跳过几条数据,也就是从第几条数据开始取
    },
    {
      $limit:5//每页显示几条数据
    }
]);

java代码整合查询语句


//定义分组字段
String[] groupIds = new String[] {"$userid","$userrole.roleid"};
//定义查询条件
Criteria criteria = new Criteria();
//相当于where username = "zhangsan"
criteria.and("username").is("zhangsan");
//相当于 where age not in("15","20")
criteria.and("age").nin("15","20");
//in操作对应的语句
//criteria.and("").in();
//定义排序条件
Sort sort = new Sort(Direction.DESC,"operateTime");
//联合查询总条数,分页用
Aggregation aggregationCount = Aggregation.newAggregation(
  Aggregation.match(criteria);//查询条件
  Aggregation.group(groupIds);//分组字段
);
//联合查询条件
Aggregation newAggregation = Aggregation.newAggregation(
  Aggregation.lookup('B','userid','userid','userinfo'),//从表名,主表联接字段,从表联接字段,别名
  Aggregation.unwind("$userrole"),
  Aggregation.match(criteria),
  Aggregation.group(groupIds)
    .last("$operateTime").as("operateTime")//取值,起别名
    .first("$userinfo").as("info"),
  Aggregation.sort(sort),
  Aggregation.skip(pageSize*(pageNumber-1L)),//Long类型的参数
  Aggregation.limit(pageSize)
);
//查询
AggregationResults<BasicDBObject> aggregate = mongoTemplate.aggregate(
  newAggregation ,"A",BasicDBObject.class//A表,是查询的主表
);
int count = mongoTemplate.aggregate(aggregationCount ,"A",BasicDBObject.class).getMappedResults().size();
//组装分页对象
Page<BasicDBObject> pager = new Page<>(aggregate.getMappedResults(),count,pageSize,pageNumber,page*(pageNumber-1));
//对象转换
将BasicDBObject转换成前面需要的类型.....

到此这篇关于java操作mongodb之多表联查的实现($lookup)的文章就介绍到这了,更多相关java mongodb多表联查内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: java操作mongodb之多表联查的实现($lookup)

本文链接: https://www.lsjlt.com/news/122660.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java操作mongodb之多表联查的实现($lookup)
    最近在开发的过程中,一个列表的查询,涉及到了多表的关联查询,由于持久层使用的是mongodb,对这个非关系型数据使用的不是很多,所以在实现此功能的过程中出现了不少问题,现在此做记录,...
    99+
    2024-04-02
  • MongoDB中多表关联查询($lookup)的深入讲解
    一.  聚合框架 聚合框架是MongoDB的高级查询语言,它允许我们通过转换和合并多个文档中的数据来生成新的单个文档中不存在的信息。 聚合管道操作主要包含下面几个部分: ...
    99+
    2024-04-02
  • MongoDB多表关联查询操作实例详解
    本文实例讲述了MongoDB多表关联查询操作。分享给大家供大家参考,具体如下: Mongoose的多表关联查询 首先,我们回忆一下,MySQL多表关联查询的语句: student表: calss表: 通...
    99+
    2024-04-02
  • MongoDB中如何实现多表联查
    今天小编给大家分享一下MongoDB中如何实现多表联查的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。前些天遇到一个需求,不复...
    99+
    2023-07-02
  • 怎么在java中使用mongodb实现多表联查
    这期内容当中小编将会给大家带来有关怎么在java中使用mongodb实现多表联查,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。多表联查的查询语句:此处使用的为mongodb的robo3t可视化工具,先说下...
    99+
    2023-06-14
  • mysql中如何实现多表联合查询操作
    这篇文章将为大家详细讲解有关mysql中如何实现多表联合查询操作,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。MySQL多表联合查询语法:复制代码 代码如下...
    99+
    2024-04-02
  • MySQL中的多表联合查询功能操作
    目录一.介绍数据准备交叉连接查询 内连接查询外连接子查询特点子查询关键字all关键字any关键字和some关键字in关键字exists关键字 自关联查询总结 一.介绍 多表查询就是同时查询两个或两个以...
    99+
    2023-02-01
    mysql多表联合查询 mysql多表查询 mysql联合查询
  • MyBatis-Plus实现多表联查
    MyBatis-Plus多表联查写法 前言一、引依赖二、使用方法三、(实战)多表查询参数说明 四、(实战)多表分页查询 前言 收获大佬封装的一个jar包,可以支持MyBatis-...
    99+
    2023-09-03
    mybatis java sql
  • MySQL多表联查的实现思路
    目录多表联查场景一对一多对一多对多内连接查询外连接自连接联合查询子查询多表联查场景 一对一 用户与用户信息表:当用户的信息数据过多时,我们可以将其分成两个表分别对应用户基本信息和用户的详情信息。 create table...
    99+
    2023-02-21
    MySQL多表联查有几种方法 MySQL多表联查语句
  • mybatis-plus多表联查join的实现
    目录1、安装依赖2、定义三个基本实体类3、定义三个mapper4、定义返回值dto5、开发业务层6、假如进行分页查询的话7、注意:8、其他9、如果针对条件进行动态查询1、安装依赖 &...
    99+
    2023-01-11
    mybatis-plus多表联查 mybatis-plus多表联查join
  • MySQL多表联查如何实现
    本文小编为大家详细介绍“MySQL多表联查如何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“MySQL多表联查如何实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。多表联查场景一对一用户与用户信息表:当用户...
    99+
    2023-07-05
  • SpringDataJpa多表操作的实现
    目录Jpa表关系分析步骤 关联关系的注解 @JoinColumn定义外键关联的字段名称 @OneToOne一对一关联关系 @OrderBy关联查询的时候的排序 @JoinTable关...
    99+
    2024-04-02
  • MySQL中如何实现多表查询操作
    本篇文章给大家分享的是有关MySQL中如何实现多表查询操作,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。create table&n...
    99+
    2024-04-02
  • Mongodb实现的关联表查询功能【population方法】
    本文实例讲述了Mongodb实现的关联表查询功能。分享给大家供大家参考,具体如下: Population MongoDB是非关联数据库。但是有时候我们还是想引用其它的文档。这就是population的用武之...
    99+
    2024-04-02
  • MyBatis-Plus怎么实现多表联查
    这篇文章主要介绍“MyBatis-Plus怎么实现多表联查”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MyBatis-Plus怎么实现多表联查”文章能帮助大家解决问题。建库建表DROP&n...
    99+
    2023-06-29
  • mongodb如何实现同库联表查询方法
    这篇文章主要介绍mongodb如何实现同库联表查询方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!注意:这里只对同库联表查询做介绍,跨库联表查询可能在之后也会介绍(因为公司架构变动...
    99+
    2024-04-02
  • MyBatis实现多表联查的详细代码
    目录一、通过映射配置文件实现多表联查二、使用注解的方式一、通过映射配置文件实现多表联查 首先,使用Mysql数据库,创建两个表,分别为学生表Student表和班级表Class表,在S...
    99+
    2022-11-13
    MyBatis多表联查 MyBatis多表查询
  • Hibernate多表关联查询怎么实现
    本篇内容介绍了“Hibernate多表关联查询怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、Hibernate简介Hiberna...
    99+
    2023-06-17
  • Java实现单链表的操作
    本文实例为大家分享了Java实现单链表的基本操作,供大家参考,具体内容如下 顺序表:物理上逻辑上都连续;链表:物理上不一定连续,逻辑上一定连续的。 链表的概念及结构 概念:连表示一种...
    99+
    2024-04-02
  • Java实现顺序表的操作
    本文实例为大家分享了Java实现顺序表的基本操作,供大家参考,具体内容如下 静态顺序表:使用定长数组存储。动态顺序表:使用动态开辟的数组存储。 接口 package com.gith...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作