MongoDB的搭建 和crud操作

news2024/11/15 7:40:26

MongoDB

docker 下载

docker run --restart=always -d --name mongo -v /docker/mongodb/data:/data/db -p 27017:27017 mongo:4.0.6

使用navcat工具使用MongoDB
在这里插入图片描述

Crud操作

jar包

<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
// 作用时与 MongoDB中的206_person对应
@Document("206_person")
public class Person {
    @Id
    private Integer id;
    private String  name;
    private Integer girls;
}

导入的包,如果出现错误进行参考

import com.hb.model.Person;
import com.mongodb.client.ListIndexesIterable;
import com.mongodb.client.model.Indexes;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import org.bson.Document;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.index.Index;
import org.springframework.data.mongodb.core.index.IndexInfo;
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 javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
@SpringBootTest
class AppTests {
    @Resource
    private MongoTemplate mongoTemplate;
   
   }

官方文档
示例均以spring boot 测试类

创建(增)

 //插入
    @Test
    //插入一条数据
    void mongoDBInsert() {
        Person shuai1 = Person.builder().id(1).name("小帅").girls(10086).build();
        mongoTemplate.insert(shuai1);
    }
    @Test
    //插入多条数据
    void mongoDBInsertAll() {
        List<Person> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            Person shuai1 = Person.builder().id(i).name("小帅"+ i).girls(10086).build();
            list.add(shuai1);
        }
        mongoTemplate.insertAll(list);
    }

修改(改)

 //更新
    @Test
    //有数据更新数据 没有数据创建数据
    void mongoDBSave() {

            Person shuai1 = Person.builder().id(1).name("小帅shuai ").girls(1008611).build();
        mongoTemplate.save(shuai1);
    }
    @Test
    //根据 条件 进行对多条数据进行更新
    void mongoDBUpdate() {
        Query query = new Query();
        query.addCriteria(Criteria.where("name").is("小帅"));
        Update update = new Update();
        Update id = update.set("name", "ggg");
        UpdateResult updateResult = mongoTemplate.updateMulti(query, update, Person.class);
        System.out.println(updateResult);

    }
    @Test
    //根据 条件 进行数据的更新
    void mongoDBUpset() {
        Query query = new Query();
        //更新的条件
        query.addCriteria(Criteria.where("id").is(3));
        //更新的内容
        Update update = new Update();
        Update id = update.set("name", "ggg");
        //更新找到的第一个数据
        UpdateResult updateResult = mongoTemplate.updateFirst(query, update, Person.class);
        System.out.println(updateResult);
    }
    @Test
    //根据 正则表达式 and 连接 条件 进行数据的更新
    void mongoDBUpsetMany() {
        Query query = new Query();
        Query query1 = query.addCriteria(Criteria.where("id").gt(4)
                .and("name").regex(".*gg$"));
        Update update = new Update().set("name","嘎嘎");
        //更新找到的第一个数据
        UpdateResult updateResult = mongoTemplate.updateMulti(query,update,Person.class);
        System.out.println(updateResult);
    }

删除(删)

  //删
    @Test
    //根据 正则表达式 and 连接 条件 进行数据的删除 不返回数据
    void mongoDBDelete() {
        Query query = new Query();
        Query query1 = query.addCriteria(Criteria.where("id").gt(4)
                .and("name").regex(".*嘎嘎$"));
        //更新找到的第一个数据
        DeleteResult remove = mongoTemplate.remove(query, Person.class);
        System.out.println(remove);
    }
    @Test
    //根据 正则表达式 and 连接 条件 进行数据的删除 返回数据
    void mongoDBDeleteReturnOne() {
        Query query = new Query();
        Query query1 = query.addCriteria(Criteria.where("id").lt(4)
                .and("name").regex(".*gg$"));
        //更新找到的第一个数据
        Person andRemove = mongoTemplate.findAndRemove(query, Person.class);
        System.out.println(andRemove);
    }
    @Test
    //根据 正则表达式 and 连接 条件 进行数据的删除 返回数据
    void mongoDBDeleteReturnAny() {
        Query query = new Query();
        Query query1 = query.addCriteria(Criteria.where("id").lt(4)
                .and("name").regex(".*gg$"));
        //更新找到的第一个数据
        List<Person> allAndRemove = mongoTemplate.findAllAndRemove(query, Person.class);
        System.out.println(allAndRemove);
   
    }

读取(查)

 //查
    @Test
        //找到全部
    void mongoDBFindAll() {
        List<Person> allAndRemove = mongoTemplate.findAll(Person.class);
        System.out.println(allAndRemove);
    }
    @Test
    //找到符合条件的第一个数据
    void mongoDBFindOne() {
        Query query = new Query();
        query.addCriteria(Criteria.where("id").in(1,2,3,4,5,6,7));
        //根据条件找到的第一个数据
        Person person= mongoTemplate.findOne(query,Person.class);
        System.out.println(person);
    }
    @Test
    //找到符合条件的第一个数据
    void mongoDBFindAny() {
        Query query = new Query();
        query.addCriteria(Criteria.where("id").in(1,2,3,4,5,6,7));
        //根据条件找到的第一个数据
        List<Person> people = mongoTemplate.find(query, Person.class);
        System.out.println(people
        );
    }
    @Test
    //找到id
    void mongoDBFindById() {
        //根据条件找到的第一个数据
        Person people = mongoTemplate.findById(3, Person.class);
        System.out.println(people);
    }
    @Test
    //找到 根据or和正则进行查找所有
    void mongoDBFindByOr() {
        Query query = new Query();
        query.addCriteria(Criteria.where("id").gte(4)
                .orOperator(Criteria.where("name").regex("^小帅.*")));
        //根据条件找到的第一个数据
        List<Person> people = mongoTemplate.find(query, Person.class);
        System.out.println(people);
    }
    @Test
    //  find by sort
    // Sort.Direction.DESC 降序排列  默认为升序
    // 这里需要记得order by 在limit和skip之前
    void mongoDBFindBySort() {
        Query query = new Query();
        query.addCriteria(Criteria.where("id").gte(4)
                .orOperator(Criteria.where("name").regex("^小帅.*")));
        query.with(Sort.by(Sort.Direction.DESC,"name")).limit(2).skip(3);
        //根据条件找到的第一个数据
        List<Person> people = mongoTemplate.find(query, Person.class);
        System.out.println(people);
    }
    @Test
    //  find by count
    void mongoDBCount() {
        Query query = new Query();
        query.addCriteria(Criteria.where("id").gte(4)
                .orOperator(Criteria.where("name").regex("^小帅.*")));
        query.with(Sort.by(Sort.Direction.DESC,"name")).skip(3);
        //根据条件找到的第一个数据
        Long people = mongoTemplate.count(query, Person.class);
        System.out.println(people);
    }

创建索引

    //索引操作

    @Test
    public void createAscendingIndex() {
        // 设置字段名称
        String field = "age";
        // 通过表名字创建索引
        mongoTemplate.getCollection("person").createIndex(Indexes.descending(field));
        //获取索引位置 Person.class 对应的 ”206_Person“
        int i = mongoTemplate.getCollectionName(Person.class).indexOf("age");
        System.out.println(i);

        //设置 Person对应的 206_persion 中的索引
        String s = mongoTemplate.indexOps(Person.class).ensureIndex(new Index().on("id", Sort.Direction.ASC));
        System.out.println(s);
    }

    /**
     * 根据索引名称移除索引
     */
    @Test
    public void removeIndex() {
        // 设置字段名称
        String field = "age_-1";
        // 删除索引
        mongoTemplate.getCollection("person").dropIndex(field);
       // mongoTemplate.indexOps(Person.class).dropIndex(field);
    }

    /**
     * 查询集合中所有的索引
     */
    @Test
    public void getIndexAll() {
        // 获取集合中所有列表 by 表名字
        ListIndexesIterable<Document> indexes = mongoTemplate.getCollection("person").listIndexes();
        // 获取索引
        for (Document index : indexes) {
            System.out.println(index.toJson());
            System.out.println("-----------------------------");
        }
        // 获取集合中所有列表 by 类
        List<IndexInfo> indexInfo = mongoTemplate.indexOps(Person.class).getIndexInfo();
        for (IndexInfo info : indexInfo) {
            System.out.println("206 " + info);
        }
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1013593.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

three.js 入门 初识

基本步骤&#xff1a; 初始设置创建场景创建相机创建可见对象创建渲染器渲染场景 安装 npm install three 引入 import * as THREE from "three"; 一、three三要素&#xff1a;场景、相机、渲染 1.场景&#xff1a; //创建场景 const scenenew THREE.Scene()…

python中not的用法

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 话不多说&#xff0c;直接开搞&#xff0c;如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 python中的not具体表示是什么: 在python中not是逻辑判断词&#xff0c;用于布尔型True和False&#xff0c; not True为F…

【Unity插件】实现多人在线游戏——Mirror插件的使用介绍

文章目录 前言导入Mirror插件 简单介绍一、RPC调用二、错误注意 基本使用一、创建场景的网络管理器二、创建一个玩家三、添加玩家初始生成位置四、玩家控制五、同步摄像机六、同步不同角色的名字和颜色修改七、同步动画八、同步子弹方法一方法二 九、聊天功能十、场景同步切换十…

torch.where()两种用法

参考官方文档。 官方文档中只给了第一种用法。根据条件condition&#xff0c;从input,other中选择元素f返回。如果满足条件&#xff0c;则返回input元素。若不满足&#xff0c;返回other元素。 还有一种用法是通过where返回张量中满足条件condition的坐标&#xff0c;以二维张…

【Unity每日一记】资源加载相关和检测相关

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…

中兴协力NB-IoT部署实验(含复杂项目)

这个实验要求每个人都完成一遍&#xff0c;并且不同学生的部分操作内容也不同&#xff0c;个别班级最后也被要求基于此完成复杂项目&#xff0c;黑字部分是必要操作&#xff0c;紫字部分是辅助完成操作或复杂项目的讲解 进入实验室&#xff0c;选择模拟器&#xff08;同一台模…

pytorch的自动微分、计算图 | 代码解析

在深度学习和机器学习中&#xff0c;自动微分是一个关键的概念&#xff0c;用于计算函数相对于其输入变量的导数&#xff08;梯度&#xff09;从而利用各类优化算法如梯度下降降低损失函数。PyTorch中的张量&#xff08;tensor&#xff09;提供了自动微分功能&#xff0c;它使得…

游戏视频录制软件对比,哪款最适合你的需求?

随着电子竞技和游戏直播行业的迅速崛起&#xff0c;越来越多的玩家渴望记录并分享自己在游戏中的精彩瞬间。游戏视频录制软件正是满足这一需求的关键工具。本文将针对三款优秀的游戏视频录制软件进行对比分析&#xff0c;以便为读者提供选购建议。 游戏视频录制软件1&#xff1…

Y4455芯片开发的433遥控流水灯方案

越来越多的家庭通过无线遥控来控制家中的照明系统&#xff0c;本文将介绍一种基于Y4455芯片的433MHz无线遥控流水灯方案&#xff0c;创造出美丽的照明场景。 一、宇凡微Y4455芯片简介 宇凡微Y4455芯片是一款低功耗、高性能的315MHz和433MHz短距离无线通讯发射芯片。它支持ASK…

Linux exec函数族

exec并不是生成新的进程还是在原进程执行 我们通常先创建一个子进程&#xff0c;在子进程里面使用exec&#xff0c;因为调用exec成功后&#xff0c;原进程的资源都被取代&#xff0c;除了一些进程ID等&#xff0c;所以在子进程里面调用exec&#xff0c;对原进程无影响。 前六个…

forest--声明式HTTP客户端框架-spring-b oot项目整合

Forest 是一个开源的 Java HTTP 客户端框架&#xff0c;它能够将 HTTP 的所有请求信息&#xff08;包括 URL、Header 以及 Body 等信息&#xff09;绑定到您自定义的 Interface 方法上&#xff0c;能够通过调用本地接口方法的方式发送 HTTP 请求。 官方链接&#xff1a; &…

实战演练 | Navicat 常用功能之转储与运行 SQL 文件

数据库管理工作中&#xff0c;"转储 SQL 文件"和"运行 SQL 文件"是两个极为常见操作。一般来说&#xff0c;用户使用数据库管理工具或命令行工具来完成。Navicat 管理开发工具中的“转储 SQL 文件”和“运行 SQL 文件”功能具有直观易用的界面、多种文件格…

北斗高精度定位,破解共享单车停车乱象

如今&#xff0c;共享单车已经成为了许多人出行的首选方式&#xff0c;方便了市民们的“最后一公里”&#xff0c;给大家的生活带来了很多便利。然而&#xff0c;乱停乱放的单车也给城市治理带来了难题。在这种情况下&#xff0c;相关企业尝试将北斗导航定位芯片装载到共享单车…

企业如何拓展市场,获取客源并进行降本增效?

对于企业来说&#xff0c;在降低成本和提高效率的同时拓展市场和获取客户是一项复杂的挑战。以下是实现这一目标的一些策略和方法&#xff1a; 1.市场研究和细分&#xff1a;进行彻底的市场研究&#xff0c;以确定您的产品或服务最有前途的细分市场。将您的精力集中在最有利可…

【PickerView案例09-上午内容复习 Objective-C预言】

一、好,我们把前面两个案例:点餐系统、城市选择界面、复习一下,然后继续讲第三个案例:国旗选择界面 1.我们就直接照着这个Demo去说了啊, 先来看一下这个,点餐系统: 首先,我们说,点餐系统,整个界面儿呢,分几部分:三部分 1)顶部呢:一个View 2)中间呢:一个Pic…

EndNote21 | 安装及库的创建

EndNote21 | 安装及库的创建 一、EndNote21安装二、EndNote21库的创建 一、EndNote21安装 软件安装界面&#xff0c;双击“EndNote 21.exe”程序&#xff1b; 图1 安装软件界面点击next&#xff0c;选择30天试用&#xff0c;点击next&#xff1b; 图2 安装过程点击next&…

数据结构——图(图的存储及基本操作)

文章目录 前言一、邻接矩阵法&#xff08;顺序存储&#xff09;1.无向图存储邻接矩阵算法2.有向图存储邻接矩阵算法 二、邻接表法(图的链式存储结构)总结 前言 邻接矩阵法(图的顺序存储结构) 1.1 无向图邻接矩阵算法 1.2 有向图邻接矩阵算法邻接表法(图的一种链式存储结构) 一…

软文推广在企业中运用的优势有哪些?

随着互联网的发展&#xff0c;越来越多的企业在推广方式上已经逐渐脱离于传统媒体&#xff0c;软文推广已经成为了企业宣传的主要方式。也有不少企业来找盒子进行推广&#xff0c;接下来媒介盒子就来告诉大家&#xff0c;企业进行软文推广的优势有哪些&#xff1f; 成本低 传统…

neon常用指令(updating)

函数参考手册&#xff1a; https://developer.arm.com/architectures/instruction-sets/simd-isas/neon/intrinsics 并在左侧选择neon\ Neon 128bit寄存器,所以可支持并行运算 加快运算速度 减少循环 CPU运算比加载数据快&#xff0c;速度瓶颈在加载数据这里。 指令集命名…

为什么你觉得Odoo二次开发难?如何切入?

先说结论&#xff0c;学习Odoo开发&#xff0c;我建议从Odoo的开发者模式切入。事实上在Odoo官网很多问题的解决方案就是基于开发者模式的。 前天有位学了《Odoo开发者模式必知必会》课程的网友跟我说&#xff0c;他之前也花钱买了其他的Odoo开发、前端开发课程&#xff0c;但…