当前位置: 首页 > 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
不包含  
          

http://www.lryc.cn/news/122657.html

相关文章:

  • JavaScript函数
  • RISC-V公测平台发布 · 使用YCSB测试SG2042上的MySQL性能
  • 母婴即时零售行业数据可视化分析
  • 快速解决IDEA中类的图标变成J,不是C的情况
  • vue学习笔记
  • 难解的bug
  • 人文景区有必要做VR云游吗?如何满足游客出行需求?
  • 【字节跳动青训营】后端笔记整理-1 | Go语言入门指南:基础语法和常用特性解析
  • 3.解构赋值
  • ChatGPT在智能游戏和游戏AI中的应用如何?
  • 【安卓串口通信】
  • 电气测试相关
  • ProsperEx 的野望:借势 RWA 浪潮,构建全新的链上衍生品体系
  • Spring Data JPA 详解
  • NZ系列工具NZ02:VBA读取PDF使用说明
  • Autocasting和GradScaler
  • 头条移动端项目Day03 —— 自媒体素材管理、自媒体文章管理、自媒体文章发布
  • 【ARM 嵌入式 编译系列 9-- GCC 编译符号表(Symbol Table)的详细介绍】
  • Apache Doris 入门教程27:BITMAP精准去重和HLL近似去重
  • bug总结
  • DC电源模块的高转换率
  • 用于网页抓取的最佳 Python 库
  • 异步回调中axios,ajax,promise,cors详解区分
  • IoTDB原理剖析
  • 中国1990-2021连续30年土地利用数据CLCD介绍及下载
  • Tubi 前端测试:迁移 Enzyme 到 React Testing Library
  • Chrome
  • 零代码编程:用ChatGPT批量删除Excel文件中的行
  • GaussDB数据库SQL系列-UNION UNION ALL
  • Azure创建第一个虚拟机