springdata-mongodb学习使用笔记

Spring boot集成mongodb使用MongoRepository完成CURD和复杂查询 Spring boot集成mongodb-使用MongoRepository完成CURD和复杂查询 阅读详情

springdata-mongodb学习使用笔记

1. 学习资料

2. MongoDB数据库安装

参考地址: https://www.runoob.com/mongodb/mongodb-window-install.html

注:给MongoDB设置密码

参见:给你的mongodb设置密码吧!

3. MongoDB客户端使用

本人使用的客户端连接工具为studio 3T,官方地址:https://studio3t.com/
优快云下载地址(非最新):https://download.youkuaiyun.com/download/simadi/11339530

连接MongoDB步骤

第一步:配置MongoDB服务器相关信息
在这里插入图片描述
第二步:配置数据库名称和数据库账号和密码
在这里插入图片描述

4. spring-data-mongodb的使用

4.1 配置信息
4.1.1 aplication.properties中的配置为
 # mongodb数据库配置 
 spring.data.mongodb.uri=mongodb://name:password@localhost:27017/databaseName 
4.2 创建删除集合
    // 注入MongoTemplate进行相关的操作
    @Resource
    private MongoTemplate mongoTemplate;

    public void mongdbTest(){
        mongoTemplate.createCollection("collectionName");
        System.out.println("创建一个集合");
        mongoTemplate.dropCollection("collectionName");
        System.out.println("删除一个集合");
    }

此外在MongoDB中可以无需创建集合,直接插入文档,MongoDB能自动创建集合。
mongoTemplate.insert(exampleList, "collectionName");

4.3 添加数据

mongoTemplate.insert(exampleList, "collectionName");

4.3 创建唯一索引
4.3.1 唯一索引

参考:SpringBoot中MongoDB注解概念及使用
加载字段声明上:@Indexed(unique = true)

4.3.2 复合唯一索引

加在类声明上:

@CompoundIndexes({ 
    // 唯一复合索引:楼层和房号不能相同,不然就是同一个房间了
    @CompoundIndex(name = "floor_num", def = "{'floor' : 1, 'num': 1}",unique=true) 
})

参考地址:https://www.cnblogs.com/linzhanfly/p/9760821.html

4.4 使用@Query注解进行查询

1. 创建dao接口集成MongoRepository
2. 写方法,在方法上加@Query注解,在@Query()括号内写上JSON格式的条件,其中有value,sort等属性,需要注意的时,目前我只发现value中的查询条件只能写一个,多了会报com.mongodb.util.JSONParseException,因此对应多条件复杂查询还是使用Java类实现比较好
如:

public interface MmxDao extends MongoRepository<Mmx,String> {
    /**
     * 根据编号和时间段来查找
     * @param bh 编号
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 返回查询结果集
     */
    @Query("{'lxsj':{$gt:?1,$lt:?2}}")
    List<Mmx> findByBhAndTime(String bh, Date startTime,Date endTime);

 }
4.6 使用方法来实现查询

springData MongoDB中支持的使用方法名查找的方法如,不过需要继承相应的Repository,
具体的请看官方文档

Table 7. Supported keywords for query methods
KeywordSampleLogical result

After

findByBirthdateAfter(Date date)

{"birthdate" : {"$gt" : date}}

GreaterThan

findByAgeGreaterThan(int age)

{"age" : {"$gt" : age}}

GreaterThanEqual

findByAgeGreaterThanEqual(int age)

{"age" : {"$gte" : age}}

Before

findByBirthdateBefore(Date date)

{"birthdate" : {"$lt" : date}}

LessThan

findByAgeLessThan(int age)

{"age" : {"$lt" : age}}

LessThanEqual

findByAgeLessThanEqual(int age)

{"age" : {"$lte" : age}}

Between

findByAgeBetween(int from, int to)

{"age" : {"$gt" : from, "$lt" : to}}

In

findByAgeIn(Collection ages)

{"age" : {"$in" : [ages…​]}}

NotIn

findByAgeNotIn(Collection ages)

{"age" : {"$nin" : [ages…​]}}

IsNotNull, NotNull

findByFirstnameNotNull()

{"firstname" : {"$ne" : null}}

IsNull, Null

findByFirstnameNull()

{"firstname" : null}

Like, StartingWith, EndingWith

findByFirstnameLike(String name)

{"firstname" : name} (name as regex)

NotLike, IsNotLike

findByFirstnameNotLike(String name)

{"firstname" : { "$not" : name }} (name as regex)

Containing on String

findByFirstnameContaining(String name)

{"firstname" : name} (name as regex)

NotContaining on String

findByFirstnameNotContaining(String name)

{"firstname" : { "$not" : name}} (name as regex)

Containing on Collection

findByAddressesContaining(Address address)

{"addresses" : { "$in" : address}}

NotContaining on Collection

findByAddressesNotContaining(Address address)

{"addresses" : { "$not" : { "$in" : address}}}

Regex

findByFirstnameRegex(String firstname)

{"firstname" : {"$regex" : firstname }}

(No keyword)

findByFirstname(String name)

{"firstname" : name}

Not

findByFirstnameNot(String name)

{"firstname" : {"$ne" : name}}

Near

findByLocationNear(Point point)

{"location" : {"$near" : [x,y]}}

Near

findByLocationNear(Point point, Distance max)

{"location" : {"$near" : [x,y], "$maxDistance" : max}}

Near

findByLocationNear(Point point, Distance min, Distance max)

{"location" : {"$near" : [x,y], "$minDistance" : min, "$maxDistance" : max}}

Within

findByLocationWithin(Circle circle)

{"location" : {"$geoWithin" : {"$center" : [ [x, y], distance]}}}

Within

findByLocationWithin(Box box)

{"location" : {"$geoWithin" : {"$box" : [ [x1, y1], x2, y2]}}}

IsTrue, True

findByActiveIsTrue()

{"active" : true}

IsFalse, False

findByActiveIsFalse()

{"active" : false}

Exists

findByLocationExists(boolean exists)

{"location" : {"$exists" : exists }}

4.5 使用Java类来实现查询

参考地址:https://blog.youkuaiyun.com/abc466038366/article/details/83780614

Sort sort = new Sort(Sort.Direction.ASC, “DEVID”).and(new Sort(Sort.Direction.ASC, “TIME”));//多条件DEVID、time
Criteria criteria = Criteria.where(“CHECK”).is(0);//查询条件
Query query = new Query(criteria);
mongoTemplate.find(query.with(sort).limit(1000), UnormalInfo.class);

使用Java类实现复杂的查询

4.6 模糊查询

参考地址:https://blog.youkuaiyun.com/u011555260/article/details/82260441
https://blog.youkuaiyun.com/wd521521/article/details/82801192
根据姓名和学号模糊查找学生,最多查找6人

public List<StudentSearch> fuzzySearch(String content) {
        Pattern patternName=Pattern.compile("^.*"+content+".*$", Pattern.CASE_INSENSITIVE);
        Pattern patternNo=Pattern.compile("^.*"+content+".*$", Pattern.CASE_INSENSITIVE);
        Criteria criteria=new Criteria().orOperator(
          Criteria.where("name").regex(patternName),
          Criteria.where("no").regex(patternNo)
        );
        Query query=new Query(criteria);
        return mongoTemplate.find(query.limit(6),StudentSearch.class);
    }

关于模糊查询的优化

4.7 分页查询

参考地址:https://www.cnblogs.com/jycboy/p/8969035.html

    @Resource
    private MongoTemplate mongoTemplate;
    @Override
    public Page<Example> findByBhAndPage(String bh, int pageIndex, int pageSize) {
        // 分页信息
        Pageable pageable=PageRequest.of(pageIndex,pageSize);
        // 排序
        Sort sort=new Sort(Sort.Direction.DESC,"bh");
        // 查询条件
        Criteria criteria=Criteria.where("bh").is(bh);
        Query query=new Query(criteria);
        // 使用MongoTemplate进行查询,然后使用PageableExecutionUtils.getPage()对查询结果进行包装,将分页信息包含进去
        return PageableExecutionUtils.getPage(mongoTemplate.find(query.with(sort).with(pageable), Example.class),
                pageable, () -> 0);
    }

注:pageIndex从0开始

4.8 根据集合中的字段进行查询

参考地址:https://blog.youkuaiyun.com/gao36951/article/details/41074191/

IAR调试CC1310的错误:Fatal error:Failed to connect to the XDS emlulator (Error -241 @ 0x0:) 从simplelink_cc13x0_sdk_2_10_00_36导入collector工程后,rebuild后进行debug,出现了如图错误:Fatal error:Failed to connect to the XDS emlulator (connect ICEPick)...(Error -241 @ 0x0)A router subpath could not be accessed.... 阅读详情

相关推荐

Android 的端智能学习路径

基础层:先补齐 Android 进阶(JNI / 性能优化)和 AI 基础概念,无需深入算法开发;核心层:掌握 TFLite 的模型加载、推理、量化,能完成基础端侧推理;落地层:聚焦实战场景(图像 / OCR / 语音),解决工程化问题(模型管理、异常处理);优化层:通过模型量化、硬件加速、工程优化,提升推理性能和用户体验。

hqiangtai的博客 340

Spring Data Jpa最佳实践

前言 Spring Data Jpa框架的目标是显著减少实现各种持久性存储的数据访问层所需的样板代码量。Spring Data Jpa存储库抽象中的中央接口是Repository。它需要领域实体类以及领域实体ID类型作为类型参数来进行管理。该接口主要用作标记接口,以捕获要使用的类型并帮助您发现扩展该接口的接口。CrudRepository、JpaRepository是更具体的数据操作抽象,一般我...

H_Rhui的博客 1413

算法交易VWAP&TWAP

VWAP的一些算法模型细节参考博客地址http://blog.sina.com.cn/s/blog_ad47bc5b01014elx.html 日内交易量预测模型http://blog.sina.com.cn/s/blog_976461170102v43p.html 算法交易其实主要是用在基金公司、券商量化比较多。例如我已经选好股,要大量买入,但是单凭交易员的操作海量单而且要完

shulixu的博客 1万+

Spring Data 查询分页 -- 分页结果返回

针对数据查询中的分页请求参数和分页结果返回,Spring 做了建模抽象并提供了相应的工具实现,这部分模型和工具包含在包spring-data-commons中,本文对其中分页结果返回部分做一下梳理,方便在开发中使用 。 分页结果返回 接口Page – 建模分页结果集合的一页 接口方法 介绍 int getTotalPages() 获取整个数据集合的总页数 int getTota...

Details Inside Spring 4850

别再买模块了!手把手教你用FT232RL-REEL芯片,从零设计一个USB转串口电路板

本文详细介绍了如何使用FT232RL-REEL芯片从零设计USB转串口电路板,涵盖核心器件选型、原理图设计、PCB布局布线及焊接调试等关键步骤。通过实战案例和性能对比,展示自制电路板在成本、性能和可靠性上的优势,特别适合硬件爱好者和工程师参考。

weixin_30561425的博客 429

PCIe设备内存访问实战:从ioremap到DMA映射的完整流程解析

本文深入解析了PCIe设备内存访问的完整流程,涵盖从CPU通过ioremap访问设备寄存器,到设备通过DMA映射高效读写主机内存的核心机制。详细探讨了虚拟地址、物理地址与总线地址的转换关系,对比了一致性与流式DMA映射的适用场景及同步要点,并阐述了IOMMU在安全与效率中的作用,为驱动开发者提供了实战代码与关键陷阱分析。

weixin_29201933的博客 504

spring boot mongodb 实现多条件查询并分页

private MongoTemplate mongoTemplate; private Pageable pageable; @Autowired public ResolveRuleService(MongoTemplate mongoTemplate) { this.mongoTemplate = mongoTemplate; } ...

LEEMER 1万+

Win10或Win8下ObjectARX2015 Wizard向导创建项目失败解决方法

[原创]objectARX 2015 Wizard安装向导在Win8/win10下无法创建项目的解决方法总结 by edata @2017-5-1 objectARX 2015 Wizard安装向导在Win8/win10下无法创建项目的解决方法 因为Win8/Win10对系统盘(默认c:)使用了高级权限管理,所以在此盘下操作文件的修改工作都需要管理员权限才行。 基于这个原因,导致非管理员安

edata的博客 7027

jpa工具类

import org.apache.shiro.util.Assert; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.query.QueryUtils; impo...

u012632466的博客 606

RK3288芯片MIPI-DSI显示疑难杂症大揭秘:从点不亮到花屏全攻克

本文针对RK3288芯片MIPI-DSI接口常见的显示异常问题进行系统性分析,提出了完整的排查解决方案。硬件方面,重点检查排线连接、电源供应和散热问题;软件方面,强调屏参配置、驱动版本及时序参数的精确调整。通过两个典型案例(点不亮与花屏)具体说明排查流程,并指出未来优化方向应包括提升芯片抗干扰能力、开发智能自适应驱动程序等。该手册为开发者提供了从基础原理到实际问题的全面指导,能有效缩短故障排查时间,确保显示系统稳定运行。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 658

【YOLOv11改进 - 特征融合】DySample :超轻量级且高效的动态上采样器

【YOLOv11改进 - 特征融合】DySample :超轻量级且高效的动态上采样器

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 1070

Spring Mongo分页获取方式(附基础MongoTemplate使用案例)

在向应用获取数据的接口通常会面临的一个问题是,获取的数据量级过大。前端无法全部展示。 譬如一个日志系统中,前端需要查询一些日志信息就会遇到这样的问题。 这个时候可以使用分页的方式,既方便前端页面展示,又避免回复数据的大小过大。 下面贴一个简单的使用案例。 首先在我们的service层根据controller层传进来pageSize及currentPage做一个PageRequest PageRequest pageRequest = PageRequest .

u011556070的博客 829

粒子群优化与蚁群算法求解多旅行商问题

它要求在给定一组城市和旅行商之间的距离矩阵的情况下,找到一条最优的路径方案,使得所有旅行商可以分别从起始城市出发,途径其他城市,并最终回到起始城市,同时总旅行距离达到最小。这两种算法都是基于群体智能的优化算法,在求解组合优化问题时具有较好的性能表现。假设有n个城市需要被m个旅行商访问,城市间的距离由距离矩阵D表示,其中D(i,j)表示第i个城市到第j个城市的距离。粒子群优化算法是一种基于群体智能的优化算法,其中的粒子代表了潜在的解,并通过模拟粒子在解空间中的移动来搜索最优解。一、多旅行商问题建模。

m0_47037246的博客 553

MongoDB学习笔记(十三):SpringData-Mongodb

最完整原版教程:http://docs.spring.io/spring-data/data-mongo/docs/1.4.0.RELEASE/reference/html/mongo.core.html 范例中的MetaDBMongoFactory是我自己写的,你也可以通过Spring配置文件获得。如下 http://www.blogjava.net/wangxinsh55/archive/...

jorwen_fang 330

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

真是惊喜啊!Alibaba首发Spring Data实战笔记

Spring 全家桶当中一个成员 Spring Data 那它在 spring 全家桶当中也是非常重要的一个存在。你想一下,我们创建一个应用不可能都是 Spring MVC 的 web 应用,对不对?有可能我创建的是一个 SpringWebflux 的这种响应式的 web 应用。有可能我都不是 web 应用,我创建的是一个 JAVA SE 的 桌面应用。好了我不管你是什么应用,你基本上都要进行存储对不对?那需要存储我们的 SpringData 它就派上用场了。

jcc4261的博客 111

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Springdata-mongodb的基本使用

文章目录一、 SpringData介绍二、 SpringData操作MongoDB的两种方式及实战1. MongoTemplate1.1 Mongodb Driver Api操作MongoDB1.1.2 基本CRUD1.1.3 连接选项1.2 MongoTemplate的基本CRUD1.3 MongoTemplate的聚合查询1.3.1 Aggregate1.3.2 MapReduce1.3.3 聚合操作和MapReduce对比1.3.4 Group操作1.3.5 Bucket聚合2. MongoRepos

haptony的博客 6710

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

SpringData MongoDB

目录1 SpringData MongoDB简介2 MongoDB环境搭建2.1 解压2.2 创建需要的目录2.3 创建配置文件2.4 启动mongodb3 SpringData MongoDB入门案例3.1目标3.2 创建工程,引入坐标3.3 创建配置文件3.4 创建实体类3.5 自定义dao接口3.6 测试4 SpringData MongoDB实现CRUD操作4.1 增删改4.2 简单查询4.3 命名规则查询 1 SpringData MongoDB简介 MongoDB是一个跨平台的,面向文档的数据

赵广陆 4438

SpringData+MongoDB入门

记录一下SpringData+MongoDB是怎么操作的。 (1)启动mongoDB 我使用的指令是:(按照官网的) mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork 端口是27017. 输入mongo回车便可进入mongoDB Shell操作界面。 (2) ...

KiMiWaWonderful的博客 751

SpringData MongoDB的自定义条件查询

Dao中定义下面的接口: /** * CmsPage:模型类型。 * Sting:代表的是主键ID的类型。 * @Description TODO * @Author Mr.Wu * @Date 2019/7/24 19:23 * @Version 1.0 **/ public interface CmsPageRepository extends MongoRepository&l...

weixin_42030357的博客 1668

SpringData MongoDB 入门案例

SpringData MongoDB 入门案例 创建工程,引入坐标 <dependencies> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mon...

qq_29860591的博客 362

springdata整合mongodb一些方法包括or,and,regex等等《有待更新》

这几天接触mongodb以及springdata,自己英语比较戳,所以整理这些方法花的时间多了点,不过也是我第一次在外国网站整理技术 不多说,直接上代码,这里只是给出一些操作方法而已,如果有需要源码的,请Q我206314068,如转载请注明出处 1 package mongodbProject1; 2 3 import java.util.List; 4 ...

ddzwq68288的专栏 330

springdata开发MongoDB示例

springdata开发MongoDB示例 springdata框架 使用IDEA初始化springboot+springdata框架,开发mongodb示例,pom.xml文件如下 <?xml version="1.0" encoding="UTF-...

weixin_30583563的博客 346

mongodb集群部署以及springdata操作mongodb

mongodb集群部署以及springdata操作mongodb

qq_40945306的博客 1395

MongoDB入门(特点,使用场景,命令行操作,SpringData-MongoDB)

哎呀,我去,这个MongoDB 这么牛的吗? 那它为什么这么牛?我们就要看看它的特点。

一切总会归于平淡 3205

五.MongoDB入门-SpringData操作MongoDB

MongoDB经典入门系列 一.MongoDB入门-MongDB介绍和安装 二.MongoDB入门-Mongodb权限管理 三.MongoDB入门-Mongodb的CRUD 四.MongoDB入门-Java操作MongoDB 五.MongoDB入门-SpringData操作MongoDB 在项目中我们更多的是使用Spring整合MongoDB进行开发,直接面向对象操作MongoDB的API即可,这里使用spring-boot-starter-data-mongodb 集成Mongodb 第一步:创建项目导

墨家巨子@俏如来 3695

使用SpringData mongodb 分页聚合查询事记

在使用springdata 构建mongodb聚合分页查询时,由于擅自创建PageImpl而引发的分页血案。。 现象:后台得到的总记录数不正常,数据库查询19条,接口查询返回29条 事发现场: Aggregation aggregation = Aggregation.newAggregation( Aggregation.sort(sort), //排序 Aggregation.lookup("cps_config", "co.

一颗工匠心 1115
上一篇: Dockerfile常用命令(更新中)
下一篇: myBase使用手册
mind_code
博客等级 码龄8年 12粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值