在Java中使用MongoDB的方法详解
一、mongoDB简介
MongoDB 是由 C++ 语言编写的,基于分布式文件存储的数据库,是一个介于关系数据库和非关系数据库之间的产品,是最接近于关系型数据库的 NoSQL 数据库。
MongoDB 旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于JSON对象。字段值可以包含其他文档,数组及文档数组
类似于

2. MongoDB优点:数据处理能力强,内存级数据库,查询速度快,扩展性强,只是不支持事务。
3. 使用场景:
1、应用不需要事务;
2、数据模型无法确定,经常发生变更;
3、应用存储的数据很大达到TB级别以上;
4、应用需要大量的地理位置查询简单的来说就是数据量比较大,而且主要是查询操作,而且不需要事务支持
二、MongoDB与Mysql的区别

三、使用
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>
配置连接参数
data:
mongodb:
host: 10.0.26.194
username: wanttop2
password: Testwanttop2
port: 27017
authentication-database: wanttop2
database: wanttop2
直接使用mongoTemplate
当然也可以自己封装一个工具类
@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.主表的关联字段
foreignField("productCode").//3.副表的关联字段
as("SysProduct");//4.建议和1一致,结果的别名
//如果需要多连表就在写一个
//LookupOperation cusAndInfoLookup1 = LookupOperation.newLookup().
// from("SysProduct").//1.副表表名字
// localField("prodItemCode").//2.主表的关联字段
// foreignField("productCode").//3.副表的关联字段
// as("SysProduct");//4.建议和1一致,结果的别名
//多表的关联条件,查询条件均传入到此
//创建查询条件
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());
}
//多表的关联条件,查询条件均传入到此
Aggregation aggregation = Aggregation.newAggregation(
//连表条件
cusAndInfoLookup,
//cusAndInfoLookup1,
//查询条件
Aggregation.match(criteria),
//最后查询结果集显示字段
Aggregation.project("pmLineCode", "prodItemCode", "prodItemName", "performance", "growthRate", "monthPerformance", "fullMonthPerformance", "SysProduct.productPicUrl"));
总结
到此这篇关于在Java中使用MongoDB的文章就介绍到这了,更多相关Java使用MongoDB内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
SpringBoot获取application.properties文件中文乱码问题及解决
这篇文章主要介绍了SpringBoot获取application.properties文件中文乱码问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-05-05
使用Kubernetes和Docker部署Java微服务详细代码
Java微服务项目是一种基于Java技术栈的分布式系统开发方式,下面这篇文章主要给大家介绍了关于使用Kubernetes和Docker部署Java微服务的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下2024-07-07
Java中的ThreadPoolExecutor线程池原理细节解析
这篇文章主要介绍了Java中的ThreadPoolExecutor线程池原理细节解析,ThreadPoolExecutor是一个线程池,最多可使用7个参数来控制线程池的生成,使用线程池可以避免创建和销毁线程的资源损耗,提高响应速度,并且可以管理线程池中线程的数量和状态等等,需要的朋友可以参考下2023-12-12


最新评论