Mongodb学习笔记2
文章目录
- 前言
- 一、搭建项目
- 二、开始编写java代码
- 1. 新增
- 2.查询
- 3. 修改
- 4. 删除
- 5.根据条件查询
- 6. 关联查询
- 7. 索引相关
- 总结
前言
MongoTemplate 相关操作 CRUD,聚合查询等;
一、搭建项目
- springboot项目创建
- 引入mongo 依赖
- docker 安装好mongo数据库
- 配置yml 链接mongo
spring:data:mongodb:host: 127.0.0.1port: 27017database: test
pom/gradle MongoTemplate 版本: 2.6.3
spring-boot-starter-data-mongodb
mongo可视化工具 robo3t


二、开始编写java代码
1. 新增
@AutowiredMongoTemplate mongoTemplate;@Testvoid add() {List<ApplicationEntity> applicationEntityList = init();Collection<ApplicationEntity> applicationEntities = mongoTemplate.insert(applicationEntityList, ApplicationEntity.class);log.info("存储成功: {}", JSONUtil.toJsonStr(mongoTemplate.findAll(ApplicationEntity.class)));}private List<ApplicationEntity> init() {List<ApplicationEntity> applicationEntityList = CollectionUtil.newArrayList();for (int i = 0; i < 2; i++) {String id = IdUtil.fastSimpleUUID();String name = "第" + RandomUtil.randomNumbers(2) + "个应用";ApplicationEntity applicationEntity = ApplicationEntity.builder().id(id).name(name).orgName(name).icon("https://www.baidu.com").status(RandomUtil.randomBoolean() ? "启用" : "禁用").type("application").build();applicationEntityList.add(applicationEntity);}return applicationEntityList;}
实体具体内容

2.查询
@AutowiredMongoTemplate mongoTemplate;@Testvoid queryField() {Query query1 = new Query();query1.fields().include("orgName", "name");List<ApplicationEntity> applicationEntities = mongoTemplate.find(query1, ApplicationEntity.class);System.out.println(JSONUtil.toJsonStr(applicationEntities));}
1 include 查询指定字段,可以不指定,查询所有字段
2 ApplicationEntity 对应mongo数据库中的一个document
3. 修改
找到要修改的,并修改
@Testvoid update() {ApplicationDto applicationDto = new ApplicationDto();applicationDto.setId("b8cbf05d102e454784ab85f23704bfb7");applicationDto.setName("测试");applicationDto.setStatus("启用");applicationDto.setIcon("www.tupian");Query query = new Query(Criteria.where("id").is(applicationDto.getId()));Update update = new Update();update.set("fileUrl", applicationDto.getIcon());update.set("name", applicationDto.getName());update.set("status", applicationDto.getStatus());mongoTemplate.updateFirst(query, update, ApplicationEntity.class);List<ApplicationEntity> all = mongoTemplate.findAll(ApplicationEntity.class);System.out.println(JSONUtil.toJsonStr(all));}
4. 删除
找到并删除
Criteria criteria = Criteria.where("pid").is(applicationDto.getId());mongoTemplate.findAllAndRemove(new Query(criteria), MenuNavigationEntity.class);
5.根据条件查询
相当于
select * from a where id=1 or id =2;
@Testvoid queryCondition() {Query query1 = new Query(new Criteria().orOperator(Criteria.where("id").is("923406"), Criteria.where("id").is("3518177")));List<MenuNavigationEntity> menuNavigationEntityList = mongoTemplate.find(query1, MenuNavigationEntity.class);System.out.println(JSONUtil.toJsonStr(menuNavigationEntityList));}
6. 关联查询
相当于
select *
from a
left join b on a.id = b.pid;
@Testvoid queryLink() {LookupOperation lookupOperation = LookupOperation.newLookup().from("menu_navigation")// 副表名称.localField("_id")// 主表关联字段.foreignField("pid")// 副表关联字段.as("menu_navigation");// 副表别名// 聚合条件Aggregation aggregation = Aggregation.newAggregation(lookupOperation,Aggregation.match(Criteria.where("menu_navigation.pid")// 副表关联的主表条件.is("b8cbf05d102e454784ab85f23704bfb7")));AggregationResults<JSONObject> aggregate = mongoTemplate.aggregate(aggregation, ApplicationEntity.class,JSONObject.class);// 条件 主表类型 结果类型List<JSONObject> mappedResults = aggregate.getMappedResults();System.out.println(JSONUtil.toJsonStr(mappedResults));}
7. 索引相关
@Testvoid index() {MongoCollection<Document> collection = mongoTemplate.getCollection("application");collection.createIndex(new Document("id", "hashed"), new IndexOptions().name("index_id"));// 唯一索引collection.createIndex(new Document("id", "hashed"), new IndexOptions().unique(true).name("index_id"));// 删除指定索引collection.dropIndex("index_id");// 删除所有索引collection.dropIndexes();}
总结
主要是展示了 MongoTemplate 中的CRUD的常规操作和 关联查询,之后会继续学习~~
还有个问题,就是我无法从已经标记为 文档的实体中获取 集合名称嘛? 现在我的代码中的集合名称都是字符串
还有就是字段名称也都是字符串,可以从这个 document 中获取嘛?

相关文章:
Mongodb学习笔记2
文章目录前言一、搭建项目二、开始编写java代码1. 新增2.查询3. 修改4. 删除5.根据条件查询6. 关联查询7. 索引相关总结前言 MongoTemplate 相关操作 CRUD,聚合查询等; 一、搭建项目 springboot项目创建引入mongo 依赖docker 安装好mongo数据库配置yml 链接mongo spring:dat…...
学习Tensorflow之基本操作
学习Tensorflow之基本操作Tensorflow基本操作1. 创建张量(1) 创建标量(2) 创建向量(3) 创建矩阵(4) shape属性(5) 判别张量类型(6) 列表和ndarray转张量2. 创建特殊张量(1) tf.ones与tf.ones_like(2) tf.zeros与tf.zeros_like(3) tf.fill(3) tf.random.normal(4) tf.random.uni…...
《Spring系列》第2章 解析XML获取Bean
一、基础代码 Spring加载bean实例的代码 public static void main(String[] args) throws IOException {// 1.获取资源Resource resource new ClassPathResource("bean.xml");// 2.获取BeanFactoryDefaultListableBeanFactory factory new DefaultListableBeanFa…...
小红书20230326暑假实习笔试
第一题:加密 小明学会了一种加密方式。他定义suc(x)为x在字母表中的后继,例如a的后继为b,b的后继为c… (即按字母表的顺序后一个)。特别的,z的后继为a。对于一个原字符串S,将其中每个字母x都替…...
【java】不要二、把字符串转成整数
目录 🔥一、编程题 1.不要二 2.把字符串转换成整数 🔥一、编程题 1.不要二 链接:不要二_牛客题霸_牛客网 (nowcoder.com) 描述:二货小易有一个W*H的网格盒子,网格的行编号为0~H-1,网格的列编号为0~W-1…...
数据的质量管控工作
数据的质量管控工作,整个工作应该围绕启动阶段制定的目标进行。适当引入一些质量管控工具可帮助我们更高效的完成工作。 第一步、数据剖析 首先应该进行已知数据问题的评估,这里评估的范围也应控制本轮管控的目标范围内。其次,通过对数据进行…...
【SpringBoot笔记29】SpringBoot集成RabbitMQ消息队列
这篇文章,主要介绍SpringBoot如何集成RabbitMQ消息队列。 目录 一、集成RabbitMQ 1.1、引入amqp依赖 1.2、添加连接信息 1.3、添加RabbitMQ配置类...
前端架构师-week2-脚手架架构设计和框架搭建
将收获什么 脚手架的实现原理 Lerna的常见用法 架构设计技巧和架构图绘制方法 主要内容 学习如何以架构师的角度思考基础架构问题 多 Package 项目管理痛点和解决方案,基于 Lerna 脚手架框架搭建 imooc-cli 脚手架需求分析和架构设计,架构设计图 附赠内…...
CMake项目实战指令详细分析
CMake是一个跨平台的自动化构建系统,可以用简单的语句来描述所有平台的编译过程。CMake可以输出各种各样的编译文件,如Makefile、VisualStudio等。 CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt文件转化为make所需要的…...
【深度学习】——LSTM参数设置
批大小设置 LSTM的批大小可以根据训练数据集的大小和计算资源的限制来确定。一般而言,批大小越大,训练速度越快,但可能会导致过拟合和内存限制。批大小越小,训练速度越慢,但对于较大的数据集和内存限制较严格的情况下…...
计算机网络高频60问 背完差不多了!!
计算机网络高频60问 网络分层结构 计算机网络体系大致分为三种,OSI七层模型、TCP/IP四层模型和五层模型。一般面试的时候考察比较多的是五层模型。 五层模型:应用层、传输层、网络层、数据链路层、物理层。 应用层:为应用程序提供交互服务…...
路由策略小实验
实验要求: 1、R1环回使用重发布,R2和R3使用双向重发布 2、使用路由策略解决,选路不佳 第一步,基础配置 [R1]int l0 [R1-LoopBack0]ip add 1.1.1.1 24 [R1-LoopBack0]int g0/0/0 [R1-GigabitEthernet0/0/0]ip add 192.168.12.1 …...
C语言realloc背后的内存管理
malloc申请内存,但不初始化。 calloc申请内存,且初始化为0。 free释放内存。 realloc重新分配已经分配的内存空间,可以变小,也可以变大。 以前一直有一个疑问,realloc是不是经常失败? 其实,rea…...
GPT可以被放任的在问答区应用吗?
GPT可以被放任的在问答区应用吗?1、CSDN问答乱象2、GPT-4,大增长时代的序幕数字生命离我们到底还有多远?AI 家教/老师/教育 距离独立又有哪些需要完成的过程?3、老顾对CSDN问答的一些看法老顾对GPT使用者的一些建议1、CSDN问答乱象…...
限制网络接口的一些简介(一)
大家在上网的时候,我们设置了www,当有来自internet的www要求时,我们的主机就会予以响应。这是因为你的主机已经开启了www的监听端口。所以,当我们启用一个daemon时,就可能触发主机的端口进行监听的动作,此时…...
ChatGPT如何批量撰写最新的热点自媒体文章
如何用ChatGPT创作高质量的自媒体文章 自媒体已成为互联网上的一个重要组成部分,无论您是想在社交媒体、博客中发布内容,高质量的文章都是自媒体成功的重要组成部分。ChatGPT是一个智能文章生成器,能够帮助创作者快速、高效地生成高质量的自…...
GPT4和ChatGPT的区别,太让人震撼
文 | Serendipity知乎 前言 GPT4上午朋友圈已经刷屏啦,不过我还在忙,刚刚才登上 GPT-4 ,现在来体验一下~ 附 GPT-4 能力测试站(无需魔法,仅供国内研究测试): https://gpt4test.com 附 Cha…...
redis实战---分布式锁--单机篇
redis分布式锁故事背景什么是Redis分布式锁业务场景未加任何锁的代码单机情况下JVM级别加锁多服务部署总结提升故事背景 本篇文章是redis实战系列的第二篇文章。本章的主要内容是Redis分布式锁的相关知识。本篇文章将告诉你什么是分布式锁,结合一个业务场景&#x…...
Java正则表达式
Java 正则表达式 文章目录Java 正则表达式捕获组正则表达式语法Matcher 类的方法索引方法查找方法替换方法start 和 end 方法matches 和 lookingAt 方法replaceFirst 和 replaceAll 方法appendReplacement 和 appendTail 方法PatternSyntaxException 类的方法正则表达式是对字符…...
MySQL数据库之——高级[进阶]SQL语句(二)正则表达式和存储过程
文章目录一、正则表达式(REGEXP)1、正则表达式匹配符2、语法二、存储过程1、概述2、优点3、 创建、调用、查看和删除存储过程4、存储过程的控制语句一、正则表达式(REGEXP) 1、正则表达式匹配符 2、语法 SELECT 选项 FROM 表名 …...
别只装AlexNet了!手把手教你在MATLAB里玩转更多预训练模型(VGG, ResNet, MobileNet安装指南)
别只装AlexNet了!手把手教你在MATLAB里玩转更多预训练模型(VGG, ResNet, MobileNet安装指南) 当你第一次在MATLAB中调用alexnet函数时,那种"开箱即用"的体验确实令人惊艳。但就像一位米其林大厨不会只满足于使用基础厨具…...
RISC-V RT-Thread Smart用户态应用编译与QEMU运行实战指南
1. 项目概述:从内核到应用的完整RISC-V生态体验最近在折腾RT-Thread Smart(简称RTT-Smart)这个微内核实时操作系统,目标平台是qemu模拟的64位RISC-V虚拟机(qemu-virt64-riscv)。整个过程的核心,…...
06-AI产品的伦理边界-当上瘾设计遇上算法合规(系列二-上瘾模型的AI重构)
AI产品的伦理边界:当上瘾设计遇上算法合规本文是「上瘾模型的AI重构」系列的第6篇(系列收官)本文你将获得 🧠 上瘾设计的伦理困境全景📐 AI放大伦理风险的5个维度📊 “设计上瘾” vs "设计价值"的…...
从IoU到Shape-IoU:如何让损失函数“看见”边界框的形状与尺度
1. 边界框回归的进化史:从IoU到Shape-IoU 目标检测任务中,边界框回归就像给物体"画框"的过程。早期的IoU(Intersection over Union)指标简单直观——用预测框和真实框的交集面积除以并集面积。这个指标在2016年之前是绝…...
Windows上安装Android应用的终极指南:告别模拟器,开启全新跨平台体验
Windows上安装Android应用的终极指南:告别模拟器,开启全新跨平台体验 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾在Windows电脑上渴…...
别再为‘No module named matlab.engine’抓狂了!手把手教你MATLAB与Python版本匹配与绑定(附Anaconda虚拟环境指南)
彻底解决MATLAB与Python版本冲突:从原理到实战的完整指南 当你兴奋地想在Python中调用MATLAB强大的信号处理功能时,突然跳出的"No module named matlab.engine"错误提示就像一盆冷水浇下来。这不是简单的安装问题,而是两个生态系统…...
星际探险队
目录 星际探险队 游戏目标 游戏准备 核心玩法 沟通技能 星际探险队 2-5人的合作桌游 游戏目标 合作完成任务卡目标,如赢得特定牌墩、特定卡牌或特定数量牌墩 游戏准备 牌组:共 40 张牌,含 4 种颜色(1-9)和王…...
英雄联盟国服换肤终极指南:R3nzSkin免费体验全皮肤
英雄联盟国服换肤终极指南:R3nzSkin免费体验全皮肤 【免费下载链接】R3nzSkin-For-China-Server Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3/R3nzSkin-For-China-Server 厌倦了英雄联盟国服中单调的默认皮肤&am…...
PUBG终极雷达系统免费搭建:从战场盲人到战术大师的完整指南
PUBG终极雷达系统免费搭建:从战场盲人到战术大师的完整指南 【免费下载链接】PUBG-maphack-map this is a working copy online-map from jussihi/PUBG-map-hack, use nodejs webserver instead of firebase. 项目地址: https://gitcode.com/gh_mirrors/pu/PUBG-m…...
Threadline MCP:基于消息协议的线程管理与任务编排框架解析
1. 项目概述:从“Threadline MCP”看现代应用架构的线程管理革新最近在GitHub上看到一个挺有意思的项目,叫“vidursharma202-del/threadline-mcp”。光看这个名字,可能有点摸不着头脑,但拆解一下,“threadline”直译是…...
