在Java中使用MongoDB的方法詳解
一、mongoDB簡(jiǎn)介
MongoDB 是由 C++ 語(yǔ)言編寫的,基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù),是一個(gè)介于關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)之間的產(chǎn)品,是最接近于關(guān)系型數(shù)據(jù)庫(kù)的 NoSQL 數(shù)據(jù)庫(kù)。
MongoDB 旨在為 WEB 應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。
MongoDB 將數(shù)據(jù)存儲(chǔ)為一個(gè)文檔,數(shù)據(jù)結(jié)構(gòu)由鍵值(key=>value)對(duì)組成。MongoDB 文檔類似于JSON對(duì)象。字段值可以包含其他文檔,數(shù)組及文檔數(shù)組
類似于

2. MongoDB優(yōu)點(diǎn):數(shù)據(jù)處理能力強(qiáng),內(nèi)存級(jí)數(shù)據(jù)庫(kù),查詢速度快,擴(kuò)展性強(qiáng),只是不支持事務(wù)。
3. 使用場(chǎng)景:
1、應(yīng)用不需要事務(wù);
2、數(shù)據(jù)模型無(wú)法確定,經(jīng)常發(fā)生變更;
3、應(yīng)用存儲(chǔ)的數(shù)據(jù)很大達(dá)到TB級(jí)別以上;
4、應(yīng)用需要大量的地理位置查詢簡(jiǎn)單的來(lái)說(shuō)就是數(shù)據(jù)量比較大,而且主要是查詢操作,而且不需要事務(wù)支持
二、MongoDB與Mysql的區(qū)別

三、使用
1、安裝
安裝地址: http://www.mongodb.org/
github: https://github.com/mongodb/

2、在java中使用
引入依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
配置連接參數(shù)
data:
mongodb:
host: 10.0.26.194
username: wanttop2
password: Testwanttop2
port: 27017
authentication-database: wanttop2
database: wanttop2
直接使用mongoTemplate
當(dāng)然也可以自己封裝一個(gè)工具類
@Autowired
private MongoTemplate mongoTemplate;
單表查詢
// 判斷 dataType 是否存在,如果存在則添加到查詢條件中
if (performanceRank.getDataType() != null) {
query.addCriteria(Criteria.where("dataType").is(performanceRank.getDataType()));
}
// 判斷 divisionCode 是否存在,如果存在則添加到查詢條件中
if (performanceRank.getDivisionCode() != null) {
query.addCriteria(Criteria.where("divisionCode").is(performanceRank.getDivisionCode()));
}
List<SysDimensionDataMarket> sysDimensionDataMarketList = MongoDBUtil.conditionalQuery(query, SysDimensionDataMarket.class, "SysDimensionDataMarket");
3、多表連接查詢
mongoDB中沒有sql的left join 和right join 的類似的概念而是用到了lookup管道操作符
mongoDB3.2版本新增(聚合管道$lookup操作)
完整代碼
//連表
LookupOperation cusAndInfoLookup = LookupOperation.newLookup().
from("SysProduct").//1.副表表名字
localField("prodItemCode").//2.主表的關(guān)聯(lián)字段
foreignField("productCode").//3.副表的關(guān)聯(lián)字段
as("SysProduct");//4.建議和1一致,結(jié)果的別名
//如果需要多連表就在寫一個(gè)
//LookupOperation cusAndInfoLookup1 = LookupOperation.newLookup().
// from("SysProduct").//1.副表表名字
// localField("prodItemCode").//2.主表的關(guān)聯(lián)字段
// foreignField("productCode").//3.副表的關(guān)聯(lián)字段
// as("SysProduct");//4.建議和1一致,結(jié)果的別名
//多表的關(guān)聯(lián)條件,查詢條件均傳入到此
//創(chuàng)建查詢條件
Criteria criteria = new Criteria();
if (totalPerformanceCross.getDataCrossType() != null) {
criteria.and("dataCrossType").is(totalPerformanceCross.getDataCrossType());
}
// 判斷 areaCode 是否存在,如果存在則添加到查詢條件中
if (totalPerformanceCross.getAreaCode() != null) {
criteria.and("areaCode").is(totalPerformanceCross.getAreaCode());
}
// 判斷 companyCode 是否存在,如果存在則添加到查詢條件中
if (totalPerformanceCross.getCompanyCode() != null) {
criteria.and("companyCode").is(totalPerformanceCross.getCompanyCode());
}
//如果查詢的字段為附表則需要加上附表名字
if (totalPerformanceCross.getDateType() != null) {
criteria.and("SysProduct.dateType").is(totalPerformanceCross.getDateType());
}
//多表的關(guān)聯(lián)條件,查詢條件均傳入到此
Aggregation aggregation = Aggregation.newAggregation(
//連表?xiàng)l件
cusAndInfoLookup,
//cusAndInfoLookup1,
//查詢條件
Aggregation.match(criteria),
//最后查詢結(jié)果集顯示字段
Aggregation.project("pmLineCode", "prodItemCode", "prodItemName", "performance", "growthRate", "monthPerformance", "fullMonthPerformance", "SysProduct.productPicUrl"));
總結(jié)
到此這篇關(guān)于在Java中使用MongoDB的文章就介紹到這了,更多相關(guān)Java使用MongoDB內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Maven導(dǎo)入Junit4后在test中無(wú)法引用問(wèn)題
在使用Maven進(jìn)行項(xiàng)目管理時(shí),可能會(huì)遇到導(dǎo)入依賴和打開項(xiàng)目結(jié)構(gòu)的問(wèn)題,本文通過(guò)實(shí)際經(jīng)驗(yàn),提供了一些解決方法和技巧,希望能幫助遇到相同問(wèn)題的開發(fā)者,此外,還鼓勵(lì)大家多多支持和分享個(gè)人經(jīng)驗(yàn),以便于共同進(jìn)步2024-10-10
SpringBoot獲取application.properties文件中文亂碼問(wèn)題及解決
這篇文章主要介紹了SpringBoot獲取application.properties文件中文亂碼問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
SpringBoot2整合ElasticJob框架過(guò)程詳解
這篇文章主要介紹了SpringBoot2整合ElasticJob框架過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
使用Kubernetes和Docker部署Java微服務(wù)詳細(xì)代碼
Java微服務(wù)項(xiàng)目是一種基于Java技術(shù)棧的分布式系統(tǒng)開發(fā)方式,下面這篇文章主要給大家介紹了關(guān)于使用Kubernetes和Docker部署Java微服務(wù)的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-07-07
Java中的ThreadPoolExecutor線程池原理細(xì)節(jié)解析
這篇文章主要介紹了Java中的ThreadPoolExecutor線程池原理細(xì)節(jié)解析,ThreadPoolExecutor是一個(gè)線程池,最多可使用7個(gè)參數(shù)來(lái)控制線程池的生成,使用線程池可以避免創(chuàng)建和銷毀線程的資源損耗,提高響應(yīng)速度,并且可以管理線程池中線程的數(shù)量和狀態(tài)等等,需要的朋友可以參考下2023-12-12
SpringBoot結(jié)合Tess4J實(shí)現(xiàn)拍圖識(shí)字的示例代碼
圖片中的文字提取已經(jīng)越來(lái)越多地應(yīng)用于數(shù)據(jù)輸入和自動(dòng)化處理過(guò)程,本文主要介紹了SpringBoot結(jié)合Tess4J實(shí)現(xiàn)拍圖識(shí)字的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下2024-06-06

