中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在java中使用mongodb實現多表聯查

發布時間:2021-03-31 16:01:23 來源:億速云 閱讀:634 作者:Leah 欄目:開發技術

這期內容當中小編將會給大家帶來有關怎么在java中使用mongodb實現多表聯查,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

多表聯查的查詢語句:

此處使用的為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實現多表聯查了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

徐闻县| 宜宾县| 清涧县| 昌平区| 闽侯县| 辽宁省| 磴口县| 兴海县| 资中县| 新安县| 屏东市| 咸丰县| 凉山| 宁德市| 读书| 濉溪县| 普定县| 衡阳县| 那坡县| 阿克陶县| 安阳县| 宜宾市| 弥勒县| 浮山县| 临夏县| 黄山市| 开封县| 鹤岗市| 泰来县| 通州市| 哈尔滨市| 苏尼特左旗| 宜章县| 阿城市| 岳普湖县| 威信县| 泌阳县| 万荣县| 克什克腾旗| 冀州市| 申扎县|