当前位置: 首页 > news >正文

java操作mongdb【超详细】

Java操作

搭建

搭建

依赖
      

    <!--mongodb--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>


          配置文件
       

   spring:data:mongodb:host: ipport: 端口username: 账号password: 密码database: 数据库authentication-database: admin


        

实体类注解

Document(collection="")
位置:实体类上
作用:声明mongdb集合名
注意:若未加 @Document ,则识别mongdb集合名为实体类名小写

Id
位置:属性上方
表明是主键,不可重复,自带索引

Field("名称")
位置:属性上方
作用:声明mongdb集合中的key名
注意:若未加 @Field("名称") ,则识别mongdb集合中的key名为实体类属性名

JsonFormat
作用:后端格式化日期后返回给前端
@JsonFormat(pattern = “yyyy-MM-dd”, timezone = “GMT+8”)
private Date birthday;//生日

@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”, timezone = “GMT+8”)
private Date createTime;//创建时间

@JsonFormat(pattern = DateUtils.LONG_TIME_FORMAT, timezone = “GMT+8”)
private Date modifyTime;//修改时间

Transient
作用:被该注解标注的,将不会被录入到数据库中。只作为普通的javaBean属性。

Indexed
位置:属性上方/实体类上
作用:声明索引
唯一索引的话是@Indexed(unique = true)。
也可以对数组进行索引,如果被索引的列是数组时,MongoDB会索引这个数组中的每一个元素。
也可以对整个Document进行索引,排序是预定义的按插入BSON数据的先后升序排列

CompoundIndex
位置:实体类上
作用:声明复合索引
示例:
@CompoundIndex(name = 'age_idx', def = “{'lastName': 1, 'age': -1}”)
此索引名为age_idx,lastName和age将作为复合索引

实体类示例

banner

@Data
@Document("banner")
public class Banner {
@Id
private String _id;//mongdb的主键
private Integer bannerId;//自己定义一个主键,用于删改查,记得添加时要随机生成主键,保证唯一性
private String bannerName;//轮播图名称
private String bannerUrl;//地址
}            

Template

MongoTemplate

使用

@Autowired
private MongoTemplate mongoTemplate;

增加

增加单个数据

mongoTemplate.insert(banner);


insert: 若新增数据的主键已经存在,则会抛 org.springframework.dao.DuplicateKeyException 异常提示主键重复,不保存当前数据
 

mongoTemplate.save(banner);


save: 若新增数据的主键已经存在,则会对当前已经存在的数据进行修改操作。

修改

根据自定义id修改

public void update(Banner banner) {
//org.springframework.data.mongodb.core.query.Query/Criteria/Update
Query query = new Query();
Criteria criteria = new Criteria();
// 设置查询条件
criteria.and("bannerId").is(banner.getBannerId());
query.addCriteria(criteria);
//创建Update,修改字段 例如把title修改为params.getTitle()
Update update = new Update().set("bannerName", banner.getBannerName()).set("bannerUrl", banner.getBannerUrl());
//执行修改操作,返回修改成功的条数
mongoTemplate.updateMulti(query,update,Banner.class);
}

删除

根据主键删除

public void delete(String id) {
//org.springframework.data.mongodb.core.query.Query/Criteria
Query query = new Query();
Criteria criteria = new Criteria();
// 设置查询条件
criteria.and("_id").is(id);
query.addCriteria(criteria);
mongoTemplate.remove(query, Banner.class);
}




删除集合中全部数据

public void dropCollection(String collectionName) {
// 计算表中数据的条数并删除
// 查询表数据条数
Query query = new Query();
List
<NationalPostPlatformUserVO> all = mongoTemplate.findAll(NationalPostPlatformUserVO.class);long count = all.size();if (count > 0) {// 删除后,就留下表明。字段和值都删除mongoTemplate.remove(query, NationalPostPlatformUserVO.class);}}


          

基本查询

根据自定义id查找

public Banner findById(Integer id) {
//org.springframework.data.mongodb.core.query.Query/Criteria
Query query = new Query();
Criteria criteria = new Criteria();
// 设置查询条件
criteria.and("bannerId").is(id);
query.addCriteria(criteria);
return mongoTemplate.findOne(query, Banner.class);
}



查询全部

public List
<Banner> findAll() {return mongoTemplate.findAll(Banner.class);}查询总数long totals = mongoTemplate.count(new Query(), Banner.class);条件查询mongoTemplate.findOne 查询一条mongoTemplate.find查询多条Query query = new Query();Criteria criteria = new Criteria();criteria.and("bannerName").is(bannerName);//条件查询query.addCriteria(criteria);return mongoTemplate.findOne(query, Banner.class);

分页查询

分页封装类

@Data
public class PageResult {
protected List records;
protected long total;
protected long size;
protected long current;
}



分页查询

public PageResult search(int page, int size) {
// 查询总数
long totals = mongoTemplate.count(new Query(), Banner.class);
//查询全部数据
List
<Banner> banners = mongoTemplate.findAll(Banner.class);// 分页查询PageResult<Banner> bannerPage=new PageResult<>();bannerPage.setRecords(banners);bannerPage.setTotal(totals);bannerPage.setSize(size);bannerPage.setCurrent(page);return bannerPage;}

Criteria条件详解

详解
and()    $and    并且
andOperator()    $and    并且
orOperator()    $or    或者
gt()    $gt    大于
gte()    $gte    大于等于
in()    $in    是否被包含在数组或者list内
is()    $is    等于
regex()        $regex    正则表达式用于模式匹配,基本上是用于文档中的发现字符串  (下面有例子)
lt()    $lt    小于
lte()    $lte    小于等于
nin    $nin
不包含  
          

相关文章:

java操作mongdb【超详细】

Java操作 搭建 搭建 依赖 <!--mongodb--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>配置文件 spring:data:mongodb:host…...

JavaScript函数

什么是函数&#xff1f; 在 JavaScript 中&#xff0c;函数是一段被封装起来用于特定任务的可重复使用的代码块。 例如&#xff1a; function logger() {console.log(IT知识一享); }这样就创造了logger()函数&#xff0c;后续可以重复利用这个函数让它输出日志&#xff0c;后…...

RISC-V公测平台发布 · 使用YCSB测试SG2042上的MySQL性能

实验介绍&#xff1a; YCSB&#xff08;全称为Yahoo! Cloud Serving Benchmark&#xff09;&#xff0c;该性能测试工具由Java语言编写&#xff08;在之前的MC文章中也提到过这个&#xff0c;如果没看过的读者可以去看看之前MC那一期&#xff09;&#xff0c;主要用于云端或者…...

母婴即时零售行业数据可视化分析

对新晋父母来说&#xff0c;很多母婴用品如同一位贴心的助手&#xff0c;为他们的宝宝提供温暖和呵护。从婴儿床垫到可爱的拼图玩具&#xff0c;每一件用品都是为宝宝的成长和发展量身定制。对于繁忙的父母们而言&#xff0c;这些用品不仅帮助照顾孩子&#xff0c;更是为他们减…...

快速解决IDEA中类的图标变成J,不是C的情况

有时候导入新的项目后&#xff0c;会出现如下情况&#xff0c;类的图标变成J&#xff0c;如图&#xff1a; 直接上解决方法: 找到项目的pom.xml&#xff0c;右键&#xff0c;在靠近最下方的位置找到Add as Maven Project&#xff0c;点击即可。 此时&#xff0c;一般类的图标就…...

vue学习笔记

1.官网 v2官网 https://v2.cn.vuejs.org/ v3官网 https://cn.vuejs.org/ 2.vue引入 在线引入 <script src"https://cdn.jsdelivr.net/npm/vue2.7.14/dist/vue.js"></script> 下载引入(下载链接) https://v2.cn.vuejs.org/js/vue.js 3.初始化渲…...

难解的bug

android.app.RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground(): ServiceRecord 【Android TimeCat】 解决 context.startforegroundservice() did not then call service.startforeground() | XiChens Blog http://www…...

人文景区有必要做VR云游吗?如何满足游客出行需求?

VR云游在旅游行业中的应用正在快速增长&#xff0c;为游客带来沉浸式体验的同时&#xff0c;也为文旅景区提供了新的营销方式。很多人说VR全景展示是虚假的&#xff0c;比不上真实的景区触感&#xff0c;人文景区真的有必要做VR云游吗&#xff1f;我的答案是很有必要。 如果你认…...

【字节跳动青训营】后端笔记整理-1 | Go语言入门指南:基础语法和常用特性解析

**本人是第六届字节跳动青训营&#xff08;后端组&#xff09;的成员。本文由博主本人整理自该营的日常学习实践&#xff0c;首发于稀土掘金&#xff1a;&#x1f517;Go语言入门指南&#xff1a;基础语法和常用特性解析 | 青训营 本文主要梳理自第六届字节跳动青训营&#xff…...

3.解构赋值

解构赋值是一种快速为变量赋值的简洁语法&#xff0c;本质上仍然是为变量赋值。 3.1数组解构 数组解构是 将数组的单元值快速批量赋值给一系列变量 的简洁语法 1.基本语法: &#xff08;1&#xff09;赋值运算符左侧的[ ]用于批量声明变量&#xff0c;右侧数组的单元值将被赋…...

ChatGPT在智能游戏和游戏AI中的应用如何?

ChatGPT在智能游戏和游戏AI领域具有广泛的应用潜力&#xff0c;可以为游戏体验增添智能和交互性&#xff0c;同时也有助于游戏开发者创造更丰富、更引人入胜的游戏内容。以下将详细探讨ChatGPT在智能游戏和游戏AI中的应用。 ## 1. 游戏角色的智能化 在角色扮演游戏&#xff0…...

【安卓串口通信】

安卓串口通信需要使用到串口适配器和USB OTG线。首先需要在Android设备上安装串口调试助手或其他支持串口通信的应用程序。然后将串口适配器连接到Android设备&#xff0c;使用USB OTG线连接即可。 接下来&#xff0c;您需要打开串口调试助手或其他应用程序&#xff0c…...

电气测试相关

项目&#xff1a; 长期过电压 瞬态过电压 瞬态欠压 跳跃启动 卸载 纹波电压 电源电压缓慢下降和上升 电源电压缓慢下降、快速上升 复位行为 短暂中断 启动脉冲 带电气系统控制的电压曲线 引脚中断 连接器中断 反极性 信号线和负载电路短路 启动行为 对分流不…...

ProsperEx 的野望:借势 RWA 浪潮,构建全新的链上衍生品体系

真实资产代币化&#xff08;RWA&#xff09;并不是一个新概念了&#xff0c;以 USDT、USDC、DAI 等一系列美元稳定币是行业内最早的 RWA 概念资产&#xff0c;这些资产以美元为价值基础通过不同信用的机制&#xff0c;将其价值映射至链上&#xff0c;并以加密货币的形式体现&am…...

Spring Data JPA 详解

目录 一、概述1.1 JPA简介1.2 Spring Data JPA简介 二、配置及应用2.1 环境配置2.2 依赖添加2.3 实体类创建2.4 Repository接口创建2.5 示例程序运行 三、实体映射3.1 注解3.2 关系映射 四、Repository接口4.1 基本增删改查4.2 自定义查询方法4.3 使用 Sort 和 Pageable 进行排…...

NZ系列工具NZ02:VBA读取PDF使用说明

【分享成果&#xff0c;随喜正能量】时光绽放并蒂莲&#xff0c;更是一份殷殷嘱托&#xff0c;更是一份诚挚祝福&#xff0c;是一份时光馈赠&#xff0c;又是一份时光陪伴。。 我的教程一共九套及VBA汉英手册一部&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解…...

Autocasting和GradScaler

Autocasting和GradScaler是什么 torch.autocast 是一个上下文管理器&#xff0c;它可以将数据类型从 float32 自动转换为 float16。这可以提高性能&#xff0c;因为 float16 比 float32 更小&#xff0c;因此可以更快地处理。torch.cuda.amp.GradScaler 是一个类&#xff0c;它…...

头条移动端项目Day03 —— 自媒体素材管理、自媒体文章管理、自媒体文章发布

❤ 作者主页&#xff1a;欢迎来到我的技术博客&#x1f60e; ❀ 个人介绍&#xff1a;大家好&#xff0c;本人热衷于Java后端开发&#xff0c;欢迎来交流学习哦&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 如果文章对您有帮助&#xff0c;记得关注、点赞、收藏、…...

【ARM 嵌入式 编译系列 9-- GCC 编译符号表(Symbol Table)的详细介绍】

文章目录 什么是符号表符号表的作用是什么如何生成符号表符号表中的数据类型有哪些&#xff1f;符号表与map文件什么关系&#xff1f; 上篇文章&#xff1a;ARM 嵌入式 番外篇 编译系列 8 – RT-Thread 编译命令 Scons 详细讲解 什么是符号表 在 ARM GCC 中&#xff0c;符号表…...

Apache Doris 入门教程27:BITMAP精准去重和HLL近似去重

BITMAP 精准去重 背景​ Doris原有的Bitmap聚合函数设计比较通用&#xff0c;但对亿级别以上bitmap大基数的交并集计算性能较差。排查后端be的bitmap聚合函数逻辑&#xff0c;发现主要有两个原因。一是当bitmap基数较大时&#xff0c;如bitmap大小超过1g&#xff0c;网络/磁盘…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

Oracle11g安装包

Oracle 11g安装包 适用于windows系统&#xff0c;64位 下载路径 oracle 11g 安装包...