亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

java操作mongodb之多表聯查的實現($lookup)

瀏覽:90日期:2022-08-15 08:38:10

最近在開發的過程中,一個列表的查詢,涉及到了多表的關聯查詢,由于持久層使用的是mongodb,對這個非關系型數據使用的不是很多,所以在實現此功能的過程中出現了不少問題,現在此做記錄,一為加深自己的理解,以后遇到此類問題可以快速的解決,二為遇到同樣問題的小伙伴提供一點小小的幫助。

全文分為兩部分:

使用robo3t編寫多表關系的查詢語句 將編寫的查詢語句整合到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多表聯查內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
主站蜘蛛池模板: 久99久热只有精品国产99 | 国产成人一区二区三区精品久久 | 天天影视色香欲综合网网站麻豆 | 精品国产综合成人亚洲区 | 黄色一级日本 | 欧美国一级毛片片aa | 国产免费a v吧在线观看不卡 | 免费观看黄色视屏 | 免费中文字幕乱码电影麻豆网 | 亚洲欧洲中文日产 | 色婷婷综合久久久久中文一区二区 | 韩国在线看免费观看高清 | 免费黄色在线 | 91精品国产91久久久久福利 | 中文字幕成人在线 | 正在播放一区二区 | 起视碰碰97摸摸碰碰视频 | 国产乱码精品一区二区三区卡 | 亚洲高清视频网站 | 亚洲 欧洲 日产 专区 | 国产亚洲福利 | 91轻吻 | 久久青草91免费观看 | 91网视频在线观看 | 亚洲一级在线观看 | 啪啪免费网站入口链接 | 成人性生交大片免费看午夜a | 亚洲欧美日本综合一区二区三区 | 亚洲成熟中国女人毛茸茸 | a级国产乱理论片在线观看ai | 国产一级黄色毛片 | 久久综合婷婷 | 成人午夜在线观看国产 | 国内精品第一页 | 女人18毛片久久鬼色 | 日韩欧美国产偷亚洲清高 | 沟沟人体一区二区 | 久久久精彩视频 | 91av国产视频| 成年性网站 | 6080yy午夜不卡一二三区 |