SpringData MongoDB学习总结

2023-10-16 07:36

本文主要是介绍SpringData MongoDB学习总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、简介

二、搭建

三、操作

(1)、集合操作

(2)、文档操作

相关注解

POJO

添加文档

查询文档

更新文档

删除文档

聚合操作


一、简介

NoSql数据库

键值对key-value 存储redis用户缓存,用户信息回话,配置信息,购物车
文档存储数据结构不严格,表结构可变类json MongoDB
列族存储
图形存储   

优势:

基于灵活的json文档模型,非常适合敏捷方式的快速开发,临时增加字段影响很小

其实与生俱来的高可用,高水平扩展能力

应用场景

游戏场景用户的装备信息,积分等
物流场景订单信息-状态
社交场景用户信息,地理位置索引,附件的人,地点等信息
视频直播用户数据,礼物信息等
大数据应用云存储系统

二、搭建

docker安装mongoDB

docker pull mongo1、创建mongo数据持久化目录mkdir -p /docker_volume/mongodb/data
运行容器
docker run -itd --name mongo -v /docker_volume/mongodb/data:/data/db -p 27017:27017 mongo 
进入容器
docker exec -it mongo /bin/mongosh // 创建用户
use admindb.createUser({user: "root",pwd: "123456",roles: [ { role: "root", db: "admin" } ]}
)

三、操作

配置文件

spring:data:mongodb:host: ip地址 #ipport: 27017     #端口号 username: root #用户password: 123456 #密码database: admin  #数据库名字--集合名字

数据库结构:

数据库(admin,test)--集合--文档

(1)、集合操作

相当于mysql中的数据库

 // 判断是否有这个集合boolean has =mongoTemplate.collectionExists("emp");// 删除集合mongoTemplate.dropCollection("emp");// 创建集合mongoTemplate.createCollection("emp");

例如:

@Autowired
MongoTemplate mongoTemplate;
@Test
void test1(){// 判断是否有这个集合    boolean has = mongoTemplate.collectionExists("emp");    if(has){// 删除集合        mongoTemplate.dropCollection("emp");    }// 创建集合    mongoTemplate.createCollection("emp");}

(2)、文档操作

相当于mysql中的表操作

数据操作

相关注解

@Document作用在类上,表示当前文档@Document(文档名称,集合名称)
@Id作用在字段上映射id字段
@Field作用在字段上映射字段
@Transient该字段不会保存到数据库中

POJO

@AllArgsConstructor
@NoArgsConstructor
@Document("emp")
@Data
public class Employee {@Id    private Integer id;    @Field    private String name;    @Field    private int age;    @Field    private Double salary;    @Field    private Date birthday;}

添加文档

1、单条数据Employee zs=  new Employee(1,"张三",21,500.00,new Date());
// 添加文档  id存在时候更新数据--用于添加或者修改mongoTemplate.save(zs);
mongoTemplate.save(zs); // 用于添加或者修改,支持批量插入
// 如果 id存在会报错
mongoTemplate.insert(zs); // 用于添加2、批量添加
@Test
void  insert(){List<Employee>list= Arrays.asList(new Employee(21,"往往",21,500.00,new Date()),        new Employee(31,"小王",21,500.00,new Date()),        new Employee(41,"小张",21,500.00,new Date()),        new Employee(51,"肖红梅",21,500.00,new Date()));    // 批量插入,如果id存在,会抛出异常--用于添加    mongoTemplate.insert(list, Employee.class);}

查询文档

1、查询全部
List<Employee> all = mongoTemplate.findAll(Employee.class);2、根据id查询
Employee empTem = mongoTemplate.findById(1, Employee.class);3、查询一条
Employee one = mongoTemplate.findOne(new Query(), Employee.class);log.info("one:{}",one);4、条件查询
@Test
public void tes3(){// 查询 id>=20 且 id<= 的字段    List<Employee> list = mongoTemplate.find(Query.query(Criteria.where("id").gte(20).lte(60)), Employee.class);    log.info("id>20的数据:{}",list);}5、模糊查询/正则查询正则不需要有 / /  List<Employee> list = mongoTemplate.find(Query.query(Criteria.where("name").regex("张")), Employee.class);6、多条件查询
@Test
public void tes5(){Criteria criteria=new Criteria();   // criteria.orOperator()    //  条件查询  name 为张三  id 为2    criteria.andOperator(Criteria.where("name").is("张三"),Criteria.where("id").is(2));    List<Employee> list = mongoTemplate.find(Query.query(criteria), Employee.class);    log.info("的数据:{}",list);}
7、排序//asc 升序,decs降序List<Employee> list = mongoTemplate.find(new Query().with(Sort.by(Sort.Order.desc("id"))), Employee.class);
8、分页使用skip和limt配合p = (pageNumber - 1) * pageSizeq = pageSizeskip(p) // 跳过p条数据limt(q) // list最大保留q条数据
例如:
// 分页查询
@Test
public void tes7(){int pageName=3;    int pageSize=4;    int p=(pageName-1)*pageSize;    int q=pageSize;    List<Employee> list = mongoTemplate.find(new Query().skip(p).limit(q), Employee.class);    log.info("第三页数据:{}",list);
}8、json字符串查询
@Test
public void tes8(){String json="{name:'张三'}";  Query query=new BasicQuery(json);    List<Employee> list = mongoTemplate.find(query, Employee.class);    log.info("json串查询:{}",list);}

更新文档

数据修改

1、更新一条
// 把id=1的 的行中 name改成小帅,更新查询到的第一条
mongoTemplate.updateFirst(Query.query(Criteria.where("id").is(1)), Update.update("name","小帅"), Employee.class);2、更新--没有找到目标就进行添加操作
mongoTemplate.upsert(Query.query(Criteria.where("id").is(202)), Update.update("name", "小帅").set("salary",100), Employee.class);或者
mongoTemplate.save(new Employee(202,"往往",21,500.00,new Date(),"新字段"));3、批量更新
public void testUpdate2(){// 批量更新    UpdateResult result = mongoTemplate.updateMulti(Query.query(Criteria.where("name").is("张三")), Update.update("name", "小红"), Employee.class);    log.info("生效条数:{}",result.getModifiedCount());}UpdateResult 对象getMatchedCount() 返回满足查询条件的文档数。getModifiedCount() 返回实际更新的文档数。wasAcknowledged() 返回更新操作是否被服务器确认。

删除文档

删除数据

   1、 删除所有文档mongoTemplate.remove(new Query(), Employee.class);   2、删除指定的mongoTemplate.remove(Query.query(Criteria.where("id").is(1)), Employee.class);

聚合操作

处理数据的计算结果(诸如统计平均值,求和等)

聚合管道

类似stream流

可以用mongoTemplate.find().stream() 代替

match(Criteria criteria)
:根据指定的查询条件筛选文档。可以使用Criteria对象来定义查询条件。
project(String... fieldNames)
:选择要包含在结果中的字段。可以指定字段名或使用表达式进行投影操作。
group(String... fieldNames)
:按照指定的字段对文档进行分组。可以使用表达式或函数来定义分组操作。
sort(Sort sort)
:对结果进行排序。可以根据指定的字段进行升序或降序排序。
skip(long num)
:跳过指定数量的文档。
limit(long num)
:限制结果集的大小。
unwind(String fieldName)
:将一个数组字段展开为多个文档,并保持其他字段的一致性。
lookup(String from, String localField, String foreignField, String as)
:执行左连接操作,将当前集合与指定的外部集合进行关联。
replaceRoot(String fieldName)
:将指定字段的值作为新文档的根级别。
count()
:计算匹配文档的数量。

这篇关于SpringData MongoDB学习总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/220025

相关文章

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi

Java反转字符串的五种方法总结

《Java反转字符串的五种方法总结》:本文主要介绍五种在Java中反转字符串的方法,包括使用StringBuilder的reverse()方法、字符数组、自定义StringBuilder方法、直接... 目录前言方法一:使用StringBuilder的reverse()方法方法二:使用字符数组方法三:使用自

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Python依赖库的几种离线安装方法总结

《Python依赖库的几种离线安装方法总结》:本文主要介绍如何在Python中使用pip工具进行依赖库的安装和管理,包括如何导出和导入依赖包列表、如何下载和安装单个或多个库包及其依赖,以及如何指定... 目录前言一、如何copy一个python环境二、如何下载一个包及其依赖并安装三、如何导出requirem

Rust格式化输出方式总结

《Rust格式化输出方式总结》Rust提供了强大的格式化输出功能,通过std::fmt模块和相关的宏来实现,主要的输出宏包括println!和format!,它们支持多种格式化占位符,如{}、{:?}... 目录Rust格式化输出方式基本的格式化输出格式化占位符Format 特性总结Rust格式化输出方式

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

Go Mongox轻松实现MongoDB的时间字段自动填充

《GoMongox轻松实现MongoDB的时间字段自动填充》这篇文章主要为大家详细介绍了Go语言如何使用mongox库,在插入和更新数据时自动填充时间字段,从而提升开发效率并减少重复代码,需要的可以... 目录前言时间字段填充规则Mongox 的安装使用 Mongox 进行插入操作使用 Mongox 进行更

Python中连接不同数据库的方法总结

《Python中连接不同数据库的方法总结》在数据驱动的现代应用开发中,Python凭借其丰富的库和强大的生态系统,成为连接各种数据库的理想编程语言,下面我们就来看看如何使用Python实现连接常用的几... 目录一、连接mysql数据库二、连接PostgreSQL数据库三、连接SQLite数据库四、连接Mo

Git提交代码详细流程及问题总结

《Git提交代码详细流程及问题总结》:本文主要介绍Git的三大分区,分别是工作区、暂存区和版本库,并详细描述了提交、推送、拉取代码和合并分支的流程,文中通过代码介绍的非常详解,需要的朋友可以参考下... 目录1.git 三大分区2.Git提交、推送、拉取代码、合并分支详细流程3.问题总结4.git push

使用Python实现操作mongodb详解

《使用Python实现操作mongodb详解》这篇文章主要为大家详细介绍了使用Python实现操作mongodb的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、示例二、常用指令三、遇到的问题一、示例from pymongo import MongoClientf