1.环境

依赖

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

配置

spring:data:mongodb:#uri: mongodb://root:root@192.168.8.128:27017/testhost: 192.168.8.128port: 27017authentication-database: adminusername: rootpassword: rootdatabase: test

2.注解说明

1.@Document(collection = "实体类")
实体类跟集合对应,标注在实体类上2.@CompoundIndexes({@CompoundIndex(name = "age_idx", def = "{'name': 1, 'age': -1}")
})
复合索引,加复合索引后通过复合索引字段查询将大大提高速度,标注在实体类上3.@MongoId
主键ID,标注在字段上4.@Indexed
声明该字段需要加索引,加索引后以该字段为条件检索将大大提高速度,标注在字段上
唯一索引的话是@Indexed(unique = true)。5.@Transient
被该注解标注的,将不会被录入到数据库中。只作为普通的javaBean属性。6.@Field
代表一个字段,可以不加,不加的话默认以参数名为列名。
package com.yzm.mongodb01.entity;import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.MongoId;@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@Document(collection = "thing")
public class Thing {@MongoIdprivate String id;private String name;private double price;private Integer left;}

3.增删改查

package com.yzm.mongodb01.controller;import com.mongodb.client.MongoCollection;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import com.yzm.mongodb01.entity.Thing;
import org.bson.Document;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.CollectionOptions;
import org.springframework.data.mongodb.core.FindAndReplaceOptions;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;
import java.util.Collection;
import java.util.List;@RestController
public class DemoController {private final MongoTemplate mongoTemplate;private final String firstCollection = "thing";public DemoController(MongoTemplate mongoTemplate) {this.mongoTemplate = mongoTemplate;}@GetMapping("/createCollection")public void createCollection() {// 判断集合是否存在System.out.println(mongoTemplate.collectionExists(Thing.class));System.out.println(mongoTemplate.collectionExists(firstCollection));CollectionOptions options = CollectionOptions.empty()// 创建固定大小的集合,须指定size.capped()// 集合内存大小,单位字节,这里设置10M;当内存达到限制时,第一个插入的文档会被移除.size(10 * 1024 * 1024)// 集合最大文档数,这里设置1000个;当文档数达到限制时,第一个插入的文档会被移除.maxDocuments(1000);MongoCollection<Document> collection = mongoTemplate.createCollection(Thing.class, options);System.out.println("collection = " + collection);}@GetMapping("/insert")public void insert() {List<Thing> list = new ArrayList<>();list.add(Thing.builder().name("铅笔").price(2.00).left(100).build());list.add(Thing.builder().name("钢笔").price(8.00).left(5).build());list.add(Thing.builder().name("毛笔").price(5.50).left(20).build());// 批量插入Collection<Thing> things = mongoTemplate.insertAll(list);things.forEach(System.out::println);//mongoTemplate.insert(list, Thing.class);//mongoTemplate.insert(list, firstCollection);//mongoTemplate.insert(Thing.class).all(list);//mongoTemplate.insert(Thing.class).bulk(list);// 单条插入Thing thing = Thing.builder().name("圆珠笔").price(5.0).left(50).build();System.out.println(mongoTemplate.insert(thing));//mongoTemplate.insert(thing, firstCollection);//mongoTemplate.insert(Thing.class).one(thing);}@GetMapping("/save")public void save() {// 单条插入,不同于insert,save如果主键ID已存在则是修改操作,而insert则会报错Thing thing = Thing.builder().name("粉笔").price(1.0).left(200).build();System.out.println(mongoTemplate.save(thing));//mongoTemplate.save(thing, firstCollection);}@GetMapping("/findAll")public void findAll() {// 查询所有List<Thing> things = mongoTemplate.findAll(Thing.class);//mongoTemplate.findAll(Thing.class, firstCollection);things.forEach(System.out::println);}@GetMapping("/findById")public void findById(Object id) {// 根据ID查询Thing thing = mongoTemplate.findById(id, Thing.class);//mongoTemplate.findById(id, Thing.class,firstCollection);System.out.println("thing = " + thing);}@GetMapping("/findOne")public void findOne(String name) {// 根据条件返回查询结果集的第一个Query query = new Query(Criteria.where("name").is(name));Thing thing = mongoTemplate.findOne(query, Thing.class);//mongoTemplate.findOne(query, Thing.class,firstCollection);System.out.println("thing = " + thing);}@GetMapping("/findByWhere")public void findByWhere(String name) {// 根据条件返回查询结果集Query query = new Query(Criteria.where("name").is(name));List<Thing> things = mongoTemplate.find(query, Thing.class);//mongoTemplate.find(query, Thing.class,firstCollection);things.forEach(System.out::println);}@GetMapping("/updateFirst")public void updateFirst(String oldName, String newName) {// 单条修改Query query = new Query(Criteria.where("name").is(oldName));Update update = Update.update("name", newName);UpdateResult result = mongoTemplate.updateFirst(query, update, Thing.class);//mongoTemplate.update(Thing.class).matching(query).apply(update).first();System.out.println("result = " + result);}@GetMapping("/updateMulti")public void updateMulti(int num1, int num2, String name) {// 批量修改Query query = new Query(Criteria.where("age").gte(num1).lte(num2));Update update = Update.update("name", name);UpdateResult result = mongoTemplate.updateMulti(query, update, Thing.class);//mongoTemplate.update(Thing.class).matching(query).apply(update).all();System.out.println("result = " + result);}@GetMapping("/upsert")public void upsert(int num1, int num2, String name) {// 存在查询文档则修改,否则插入文档Query query = new Query(Criteria.where("age").gte(num1).lte(num2));Update update = Update.update("name", name);UpdateResult result = mongoTemplate.upsert(query, update, Thing.class);//mongoTemplate.update(Thing.class).matching(query).apply(update).upsert();System.out.println("result = " + result);}@GetMapping("/remove")public void remove(String name) {// 移除文档Query query = new Query(Criteria.where("age").is(name));DeleteResult result = mongoTemplate.remove(query, Thing.class);System.out.println("result = " + result);
//        mongoTemplate.findAndRemove(query, Thing.class);
//        mongoTemplate.findAllAndRemove(query, Thing.class);
//        mongoTemplate.remove(Thing.class).matching(query).one();}@GetMapping("/page")public void page() {// 分页查询Query query = new Query().skip(1).limit(5)//.with(Sort.by(Sort.Order.asc("age"))).with(Sort.sort(Thing.class).by(Thing::getPrice).ascending());List<Thing> list = mongoTemplate.find(query, Thing.class);list.forEach(System.out::println);}}

Mongodb之Springboot整合相关推荐

  1. 【ReactJs+springBoot项目——租房】第6章:MongoDB入门+SpringBoot整合MongoDB+搭建微聊系统+实现微聊功能

    MongoDB入门 MongoDB的java api的使用 SpringBoot整合MongoDB使用 搭建微聊系统 实现微聊功能 分布式WebSocket解决方案分析 1.MongoDB入门 1.1 ...

  2. 直接裂开!京东二面被问SpringBoot整合MongoDB,我不会啊

    开始进入正题 一.技术介绍 SpringBoot整合MongoDB的实现步骤 一.技术介绍 1.MongoDB是什么? 二.使用步骤 1.MongoDB是什么? MongoDB(来自于英文单词&quo ...

  3. SpringBoot整合MongoDB 及 基本使用

    目录 1.MongoDB基本介绍 2.MongoDB的特点 3.MongoDB的体系结构 4.MongoDB的数据类型 5.SpringBoot整合MongoDB ** 1.导入依赖 2.启动Mong ...

  4. SpringBoot整合MongoDB数据库并实现基础CRUD

    MongoDB安装教程:MongoDB数据库安装以及将MongoDB设置为系统服务 MongoDB简介 MongoDB是一个基于分布式文件存储的数据库,由C++语言编写.旨为WEB应用提供可扩展的高性 ...

  5. Spring-Boot 整合MongoDB

    Spring-Boot 整合MongoDB 一.引入MongoDB依赖 <dependency><groupId>org.springframework.boot</gr ...

  6. SpringBoot整合Mongodb(三) 使用MongoTemplate进行连表查询

    SpringBoot整合Mongodb(三) 使用MongoTemplate进行连表查询 由于在实际开发项目中,突然涉及到了需要Mongodb 进行连表操作的业务,所以我在私下进行了一波学习. 服务器 ...

  7. springboot 整合 mongodb Criteria类 查询条件大全

    关于springboot整合mongodb,可查看博文 https://blog.csdn.net/qq_41712271/article/details/116062611 import cn.hu ...

  8. SpringBoot 整合mongoDB实现文章存储

    本项目展示了 SpringBoot 整合mongoDB进行文章存储,并实现简单增删改查,关于docker安装MongoDB:Docker 安装 MongoDB_Michael-DYZ的博客-CSDN博 ...

  9. Java学习——springboot整合mysql、redis、mongodb

    Java学习--springboot整合mysql.redis.mongodb 1. 环境搭建 2. 搭建目录结构 3. 各层内容 4. 测试 1. 环境搭建 创建SpringBoot工程时勾选如下技 ...

最新文章

  1. FastDFS分布式文件系统的安装及配置
  2. CTEX - 在线文档 - TeX/LaTeX 常用宏包
  3. 【2018.4.14】模拟赛之二-ssl2392 蚂蚁【图论】
  4. java打印三角形,菱形。任意边长大小
  5. sort()函数、C++
  6. XCode4.2 SVN设置
  7. Linux指令日期转为字符串,linux时间转换函数【转】
  8. RHELServer6.2下编译GDAL和mysql和proj4支持
  9. 压力测试神器stresstester源码分析
  10. 【转】mybatis在xml文件中处理大于号小于号的方法
  11. android UI之去掉状态栏
  12. 大数据技术综合分析!数据采集与预处理
  13. Linux中drwxr-xr-x.的意思和文件权限详解
  14. QML_虚拟键盘使用
  15. 康考迪亚计算机科学硕士,康考迪亚大学专业
  16. 【LaTeX在线编译器】
  17. 如何通过JS调用快递单号查询接口,完成物流轨迹查询
  18. mongo数据库创建用户
  19. 2022年武汉市创新型中小企业认定条件和评价指标
  20. 【修复版】仿我爱看电影网站模板/海洋CMS影视系统模板

热门文章

  1. Android 4.0 全屏显示,在我的原道n90 ICS 4.0.3版本实验通过
  2. Mess——一个可混淆Activity的项目
  3. UI福利包——160多个android开源代码汇总
  4. 学生用计算机锁定,巧用win7锁定计算机 防止孩子沉迷游戏
  5. 企业数字化转型的下一站,为什么是事件驱动架构?
  6. 计算机开机没反应怎么办,电脑开机没反应怎么办?
  7. 大道PHP+LAMP+ZEND+开源框架整合开发与实战|pdf电子书(100m)
  8. FFmpeg入门详解之55:把控FFmpeg骨架:“八大金刚”核心开发库
  9. pytorch并行报错RuntimeError: unable to write to file</torch_xxx>
  10. 安卓---实验7---小猴子摘桃