MongoDB 使用

1 引用依赖包

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

2 配置文件配置mongodb资料

# MongoDB连接信息
spring.data.mongodb.host = 192.168.23.27
spring.data.mongodb.port = 27017
spring.data.mongodb.database = mallspring.data.mongodb.auto-index-creation = true

3 准备对象Person

/*
 * Copyright (c) 2020, 2024,  All rights reserved.
 *
 */
package com.by.model;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;

import java.lang.annotation.Documented;
import java.time.LocalDateTime;
import java.util.Date;

/**
 * <p>Project: SpringBoot_MongoDb - Person</p>
 * <p>Powered by scl On 2024-04-12 14:14:01</p>
 * <p>描述:<p>
 *
 * @author 孙臣龙 [1846080280@qq.com]
 * @version 1.0
 * @since 17
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Document(collection = "person") //如果要设置过期时间,需要设置collection
public class Person {
    private Integer id ;
    private String name ;
    private Integer age ;

    //设置过期时间
    //@Indexed(expireAfterSeconds = 5)
    //private LocalDateTime createTime ;
}

4、新增文档

package com.by;


import com.by.model.Person;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.mongodb.core.MongoTemplate;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

@SpringBootTest
class AddTest {

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * 默认集合插入
     */
    @Test
    void test1() {
        Person person = Person.builder().id(1).name("章五郎").age(28).build();
        Person insert = mongoTemplate.insert(person);
        System.out.println(insert);
    }

    /**
     * 指定集合插入
     */
    @Test
    void test2() {
        Person person = Person.builder().id(1).name("章五郎").age(28).build();
        Person insert = mongoTemplate.insert(person, "my_person");
        System.out.println(insert);
    }

    /**
     * 批量插入
     */
    @Test
    void test3() {
        List<Person> list = new ArrayList<>();
        for (int i = 1; i <= 10; i++) {
            Person person = Person.builder().id(i).name("章五郎" + i).age(i + 20).build();
            list.add(person);
        }
        Collection<Person> people = mongoTemplate.insertAll(list);
        System.out.println(people);
    }

    /**
     * 判断数据库中是否存在,如果不存在就插入,如果存在就更新
     */
    @Test
    void test4() {
        Person person = Person.builder().id(1).name("大帅").age(20).build();
        Person save = mongoTemplate.save(person);
        System.out.println(save);
    }

    /**
     * 过期设置
     */
    @Test
    void test5() {
        //Person person = Person.builder().id(11).name("大帅").age(28).createTime(LocalDateTime.now()).build();
        //Person save = mongoTemplate.insert(person);
        //System.out.println(save);
    }

}

5、删除文档

package com.by;

import com.by.model.Person;
import com.mongodb.client.result.DeleteResult;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
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 java.util.List;

@SpringBootTest
class DeleteTest {

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * 删除符合条件的所有文档
     */
    @Test
    void test1() {
        Query query = new Query(Criteria.where("age").gt(10));
        DeleteResult remove = mongoTemplate.remove(query, Person.class);
        long deletedCount = remove.getDeletedCount();
        System.out.println(deletedCount);
    }

    /**
     * 删除符合条件的单个文档,并返回删除的文档
     */
    @Test
    void test2() {
        Query query = new Query(Criteria.where("name").is("章五郎2"));
        Person result = mongoTemplate.findAndRemove(query, Person.class);
        System.out.println("删除的内容为:"+result);
    }

    /**
     * 删除符合条件的所有文档,并返回删除的文档
     */
    @Test
    void test3() {
        Query query = new Query(Criteria.where("age").lte(30));
        List<Person> list=mongoTemplate.findAllAndRemove(query, Person.class);
        for (Person person :list){
            System.out.println("删除的内容为:" + person);
        }

    }


}

6、查询文档

package com.by;

import com.by.model.Person;
import com.mongodb.client.result.DeleteResult;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
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.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;

import java.util.ArrayList;
import java.util.List;

@SpringBootTest
class SelectTest {

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * 查询集合中的全部文档数据
     */
    @Test
    void test1() {
        List<Person> list = mongoTemplate.findAll(Person.class);
        for (Person person : list) {
            System.out.println(person);
        }
    }

    /**
     * 查询集合中指定的ID文档数据
     */
    @Test
    void test2() {
        Person person = mongoTemplate.findById(1, Person.class);
        System.out.println(person);
    }

    /**
     * 根据条件查询集合中符合条件的文档,返回第一条数据
     */
    @Test
    void test3() {
        Query query = new Query(Criteria.where("age").gt(18));
        Person one = mongoTemplate.findOne(query, Person.class);
        System.out.println(one);
    }

    /**
     * 根据【AND】关联多个查询条件,查询集合中所有符合条件的文档数据
     */
    @Test
    void test4() {
        Query query = new Query();
        Criteria age = Criteria.where("age").is(18);
        Criteria name = Criteria.where("name").is("章五郎1");
        Criteria criteria = new Criteria().andOperator(age, name);
        query.addCriteria(criteria);
        List<Person> list = mongoTemplate.find(query, Person.class);
        for (Person person : list) {
            System.out.println(person);
        }
    }

    /**
     * 根据【OR】关联多个查询条件,查询集合中所有符合条件的文档数据
     */
    @Test
    void test5() {
        Query query = new Query();
        Criteria age = Criteria.where("age").is(18);
        Criteria name = Criteria.where("name").is("章五郎1");
        Criteria criteria = new Criteria().orOperator(age, name);
        query.addCriteria(criteria);
        List<Person> list = mongoTemplate.find(query, Person.class);
        for (Person person : list) {
            System.out.println(person);
        }
    }

    /**
     * 根据【IN】关联多个查询条件,查询集合中所有符合条件的文档数据
     */
    @Test
    void test6() {
        Query query = new Query();
        List<Integer> list = new ArrayList<>();
        list.add(18);
        list.add(29);
        list.add(30);
        Criteria criteria = Criteria.where("age").in(list);
        query.addCriteria(criteria);
        List<Person> list1 = mongoTemplate.find(query, Person.class);
        for (Person person : list1) {
            System.out.println(person);
        }
    }

    /**
     * 根据【逻辑运算符】查询集合中的文档数据
     */
    @Test
    void test7() {
        Query query = new Query();
        Criteria criteria = Criteria.where("age").gte(18).lte(30);
        //排序
        query.addCriteria(criteria).with(Sort.by(Sort.Direction.DESC, "age"));
        List<Person> list1 = mongoTemplate.find(query, Person.class);
        for (Person person : list1) {
            System.out.println(person);
        }
    }

    /**
     * 正则表达式
     */
    @Test
    void test8() {
        Query query = new Query();
        Criteria criteria = Criteria.where("name").regex("^章");
        //排序 + 分页 + 限制条数
        query.addCriteria(criteria).with(Sort.by(Sort.Direction.DESC, "age")).limit(2).skip(3);
        List<Person> list1 = mongoTemplate.find(query, Person.class);
        for (Person person : list1) {
            System.out.println(person);
        }
    }
}

7、修改文档

package com.by;

import com.by.model.Person;
import com.mongodb.client.result.UpdateResult;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
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.data.mongodb.core.query.UpdateDefinition;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

@SpringBootTest
class UpdateTest {

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * 根据条件修改
     */
    @Test
    void test1() {
        //Query query, UpdateDefinition update, Class<?> entityClass
        Query query = new Query();
        // Criteria implements CriteriaDefinition
        query.addCriteria(Criteria.where("name").is("大帅"));
        //Update implements UpdateDefinition
        Update update = new Update();
        update.set("age", 18);
        mongoTemplate.updateFirst(query,update , Person.class);
    }

    /**
     * 根据多个条件修改
     */
    @Test
    void test3() {
        //Query query, UpdateDefinition update, Class<?> entityClass
        Query query = new Query();
        // Criteria implements CriteriaDefinition
        query.addCriteria(Criteria.where("name").is("大帅").and("age").is(18));
        //Update implements UpdateDefinition
        Update update = new Update();
        update.set("age", 28);
        UpdateResult result = mongoTemplate.updateFirst(query, update, Person.class);
        System.out.println(result.getModifiedCount());
    }

    /**
     * 根据条件修改全部的值
     */
    @Test
    void test2() {
        //Query query, UpdateDefinition update, Class<?> entityClass
        Query query = new Query();
        // Criteria implements CriteriaDefinition
        query.addCriteria(Criteria.where("age").gte(18));
        //Update implements UpdateDefinition
        Update update = new Update();
        update.set("age", 18);
        mongoTemplate.updateMulti(query,update , Person.class);
    }



}

8、索引的使用

package com.by;

import com.by.model.Person;
import com.mongodb.client.ListIndexesIterable;
import com.mongodb.client.model.Indexes;
import org.bson.Document;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.index.Index;
import org.springframework.data.mongodb.core.index.Indexed;

import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;

@SpringBootTest
class IndexTest {

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * 创建升序索引
     */
    @Test
    void test1() {
        String index = mongoTemplate.getCollection("person").createIndex(Indexes.descending("age"));
        System.out.println(index);
    }

    /**
     * 删除索引
     */
    @Test
    void test2() {
        mongoTemplate.getCollection("person").dropIndex("age_-1");
    }

    /**
     * 查询集合中所有的索引
     */
    @Test
    void test3() {
        ListIndexesIterable<Document> person = mongoTemplate.getCollection("person").listIndexes();
        for (Document document : person) {
            System.out.println(document);
        }

    }

}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ESP32_IDF前端命令开发全过程

ESP32 IDF前端命令开发全过程 开端1. 创建新工程(create-project)2. 创建新组件(create--component)目前文件结构 3. 设置目标芯片4. 配置项目5. 编译工程6. 烧录程序7. 打开监视器8. 一次性编译烧录并打开监视器9. 擦除设备flash10. 查询内存剩余11. 清除编译文件 仅供本人查阅…

【位运算】Leetcode 消失的两个数字

题目解析 面试题 17.19. 消失的两个数字 算法讲解 我们将这两个数组异或在一起&#xff0c;最后的结果就是a ^ b(缺失的两个数字)的结果&#xff0c;这两个缺失的数字一定是不相同的&#xff0c;所以我们就寻找他们第一个比特位是1的那个位置&#xff0c;异或的原理是&#xf…

为了执行SQL语句,MySQL的架构是怎样设计的

1. 把MySQL当个黑盒子一样执行SQL语句 上一讲我们已经说到&#xff0c;我们的系统采用数据库连接池的方式去并发访问数据库&#xff0c;然后数据库自己其实也会维护一个连 接池&#xff0c;其中管理了各种系统跟这台数据库服务器建立的所有连接 我们先看下图回顾一下 当我们的…

WordPress用户福音:Elementor Pro国产版替代方案,全新中文界面更懂你

如果你正在考虑创建自己的网站&#xff0c;那么在第一次谷歌搜索时&#xff0c;你可能已经看到了WordPress、Elementor和网站构建器这些专业名称。WordPress是最受欢迎的网站平台之一&#xff0c;这不难理解&#xff1a;它高度可定制&#xff0c;易于学习&#xff0c;而且是免费…

第十五届蓝桥杯 javaB组第三题

测试通过了90% 剩下10%不知道哪错了 思路&#xff1a;我想的是用map&#xff0c;k存第几个队列&#xff0c;value存每个子队列的长度&#xff0c;最后给value排序 第一个就最小的也就是是有效元素数量 考试只对了个案例&#xff0c;其它情况没测试。 复盘 回来后经过修改改…

3.00 版本来了!DolphinDB V2.00.12 V3.00.0 正式发布!

一文带你了解 DolphinDB 全新版本升级&#xff01; 本次更新后&#xff0c;3.00.0版本将成为 DolphinDB 的最新版&#xff0c;2.00.12版本变更为稳定版&#xff0c;此前发布的1.30.23版本将成为1.30系列的最后一个版本。接下来&#xff0c;带大家一起看看 DolphinDB V2.00.12 …

Android Studio通过修改文件gradle-wrapper.properties内容下载gradle

一、问题描述 在Android Studio中新建项目后会下载你所新建的项目的activity/gradle/wrapper目录下所配置的gradle-7.3.3-bin.zip包&#xff08;笔者的是该版本包&#xff09;&#xff0c;而大多数时候会下载失败&#xff0c;如下 二、解决办法 新建工程后&#xff0c;取消下…

使用 Fn Project 搭建无服务平台

目录 下载 脚本直接下载 下载可执行文件 上传 启动 Fn 服务 初始化 Fn 工程 创建 app 部署 function 调用 function JSON 入参 官方文档 下载 有两种下载方式 脚本直接下载 直接在服务器执行该命令即可 curl -LSs https://raw.githubusercontent.com/fnproject/…

10、【代理模式】通过引入一个代理对象来控制对原始对象的访问的方式。

你好&#xff0c;我是程序员雪球。 今天我们了解代理模式的原理、静态代理和动态代理的区别、Spring AOP 和动态代理的关系、代理模式的使用场景&#xff0c;以及用 Java 实现一个动态代理示例 一、代理模式的原理 代理模式是一种设计模式&#xff0c;它提供了一种通过引入一个…

【十一】MyBatis Plus 原理分析

MyBatis Plus 原理分析 摘要 Java EE开发中必不可少ORM框架&#xff0c;目前行业里最流行的orm框架非Mybatis莫属了&#xff0c;而Mybatis框架本身没有提供api实现&#xff0c;所以市面上推出了Mybatis plus系列框架&#xff0c;plus版是mybatis增强工具&#xff0c;用于简化My…

量子飞跃:从根本上改变复杂问题的解决方式

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 编辑丨王珩 编译/排版丨沛贤 深度好文&#xff1a;1000字丨5分钟阅读 利用多功能量子比特的量子计算机已处于解决复杂优化问题的最前沿&#xff0c;例如旅行商问题&#xff0c;这是一个典型的…

虚良SEOPython脚本寄生虫程序源码

本程序&#xff0c;快速收录百度首页&#xff0c;3-5天就可以有流量&#xff0c;长期稳定&#xff0c;可以设置自动推送。 点这里 Python脚本寄生虫程序源码&#xff08;寄生虫电影脚本&#xff09; - 虚良SEO 模板可以自己修改&#xff0c;源码带模板标签说明&#xff0c;简…

AI大模型日报#0415:贾佳亚团队新作王炸、马斯克首款多模态大模型、ChatGPT to B

导读&#xff1a; 欢迎阅读《AI大模型日报》&#xff0c;内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了每条资讯的摘要。标题: 融合ChatGPTDALLE3&#xff0c;贾佳亚团队新作开源&#xff1a;识图推理生图一站解决 摘要: 贾佳亚团队推出了多模态模型Mini-Gem…

day58 回文子串 最长回文子序列

题目1&#xff1a;647 回文子串 题目链接&#xff1a;647 回文子串 题意 统计字符串s中回文子串的数目 回文子串是正着读和倒过来读一样的字符串 子串是连续字符组成的一个序列 动态规划 动规五部曲 1&#xff09;dp数组及下标i的含义 dp[i][j] 表示 [s[i]&#xf…

转移插槽简介

4.3.4.转移插槽 我们要将num存储到7004节点&#xff0c;因此需要先看看num的插槽是多少&#xff1a; 如上图所示&#xff0c;num的插槽为2765. 我们可以将0~3000的插槽从7001转移到7004&#xff0c;命令格式如下&#xff1a; 具体命令如下&#xff1a; 建立连接&#xff1a;…

【读书笔记】自动驾驶与机器人中的SLAM技术——高翔

文章会对本书第五章节及以后章节进行总结概括。每日更新一部分。一起读书吧。 第五章——基础点云处理 重点&#xff1a;点云的相邻关系是许多算法的基础 5.1 激光雷达传感器与点云的数学模型 5.1.1激光雷达传感器的数学模型 雷达有两种&#xff1a;机械旋转式激光雷达&…

RocketMQ集群配置

我们集群部署采取采用2m-2s&#xff08;同步双写&#xff09;方式&#xff0c;每个Master配置一个Slave&#xff0c;有多对Master-Slave&#xff0c;HA采用同步双写方式&#xff0c;即只有主备都写成功&#xff0c;才向应用返回成功. 1、服务器环境 序号IP角色架构模式1192.16…

一文详解MES、ERP、SCM、WMS、APS、SCADA、PLM、QMS、CRM、EAM及其关系

经常遇到很多系统&#xff0c;比如&#xff1a;MES、ERP、SCM、WMS、APS、SCADA、PLM、QMS、CRM、EAM&#xff0c;这些都是什么系统&#xff1f;有什么功能和作用&#xff1f;它们之间的关系是怎样的&#xff1f; 今天就一文详细分享给大家。 10大系统之间的关系 ERP 和其他…

深度学习之PyTorch实现卷积神经网络(CNN)

在深度学习领域&#xff0c;卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;CNN&#xff09;是一种非常强大的模型&#xff0c;专门用于处理图像数据。CNN通过卷积操作和池化操作来提取图像中的特征&#xff0c;具有较好的特征学习能力&#xff0c;特别适用…

机器学习算法快速入门

文章目录 0.简介1.常用术语1) 模型2) 数据集3) 样本&特征4) 向量5) 矩阵6)假设函数&损失函数7&#xff09;拟合&过拟合&欠拟合 2.线性回归3.梯度下降求极值4.Logistic回归算法&#xff08;分类问题&#xff09;5.KNN最邻近分类算法6.朴素贝叶斯分类算法7.决策树…