MongoDB 使用

news2024/12/23 10:15:57

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);
        }

    }

}

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

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

相关文章

03-JAVA设计模式-组合模式

组合模式 什么是组合模式 组合模式&#xff08;Composite Pattern&#xff09;允许你将对象组合成树形结构以表示“部分-整体”的层次结构&#xff0c;使得客户端以统一的方式处理单个对象和对象的组合。组合模式让你可以将对象组合成树形结构&#xff0c;并且能像单独对象一…

支持向量机模型pytorch

通过5个条件判定一件事情是否会发生&#xff0c;5个条件对这件事情是否发生的影响力不同&#xff0c;计算每个条件对这件事情发生的影响力多大&#xff0c;写一个支持向量机模型pytorch程序,最后打印5个条件分别的影响力。 示例一 支持向量机&#xff08;SVM&#xff09;是一种…

企业网盘搭建——LNMP

php包链接&#xff1a;https://pan.baidu.com/s/1RElYTQx320pN6452N_7t1Q?pwdp8gs 提取码&#xff1a;p8gs 网盘源码包链接&#xff1a;https://pan.baidu.com/s/1BaYqwruka1P6h5wBBrLiBw?pwdwrzo 提取码&#xff1a;wrzo 目录 一.手动部署 二.自动部署 一.手动部署 …

Python pytest 面试题!

在Python软件开发中&#xff0c;单元测试是非常重要的一环。它可以帮助开发人员确保代码的正确性并提高代码质量。pytest是一个功能强大且易于使用的Python测试框架&#xff0c;它提供了丰富的功能和灵活的用法&#xff0c;使得编写和执行测试变得更简单和高效。 本文将介绍一…

如何把车卖出去,什么营销最靠谱!

之前我看过雷军的《小米创业思考》&#xff0c;在书中他一直在强调互联网思维&#xff0c;这是一种非常好的思考模式&#xff0c;不仅限于互联网产品&#xff0c;在这次卖车上也一样展现的淋漓尽致。 营销一样需要被设计。提到&#xff0c;不少设计师首先想到的是做运营海报&am…

pycharm连接hugging face等网站

一、设置环境变量 在代码最前面设置变量 os.environ[ALL_PROXY] http://127.0.0.1:7890 file-->setting 二、查看自己的代理ip 控制面板-网络和internet-internet选项-连接-局域网设置 1.控制面板 2. 网络和internet 3.internet选项 4.连接 5.局域网设置 6.IP

vue3大事件项目3

弹框验证 先准备变量: const formModel ref({ cate_name: , cate_alias: }) 还有规则&#xff1a; const rules { cate_name: [ { required: true, message: please input name, trigger: blur }, { pattern: /^\S{1,10}$/, message: must be 1-10, trigger: blur } ], …

windows下使用nginx设置静态资源路由

1、下载nginx http://nginx.org/en/download.html 下载稳定版本&#xff0c;以nginx/Windows-1.24.0为例&#xff0c;下载后解压&#xff0c;解压后如下&#xff1a; 2、启动nginx 打开cmd命令窗口&#xff0c;切换到nginx解压目录下&#xff1a; start nginx # 启动nginx服务…

浮点数表示的数值范围详解(一)

学生问了一个问题&#xff1a; 这个问题如果想讲明白&#xff0c;需要将基础知识复习一下。 一、定点数 1、什么是定点数&#xff1f; 定点数指小数点在数中位置固定不变的数。 详细解释&#xff1a;计算机中小数点的位置固定不变&#xff0c;小数点前、后的数字&#xff…

一种动态防御策略——移动目标防御(MTD)

文章速览&#xff1a; 1、高级规避攻击 2、用移动目标防御对抗欺骗 常见做法操作系统和应用程序才是真正的战场打破游戏规则 网络攻击的技术变得愈发难测&#xff0c;网络攻击者用多态性、混淆、加密和自我修改乔装他们的恶意软件&#xff0c;以此逃避防御性的检测&#xf…

正基塑业邀您参观2024长三角快递物流供应链与技术装备展览会

2024.7.8-10 杭州国际博览中心 科技创新&#xff0c;数字赋能 同期举办&#xff1a;数字物流技术展新能源商用车及物流车展 电商物流包装展 冷链物流展 展会介绍 2024长三角快递物流供应链与技术装备展览会&#xff08;杭州&#xff09;&#xff0c;于2024年7月8-10日在杭州…

机器学习中的激活函数

激活函数存在的意义&#xff1a; 激活函数决定了某个神经元是否被激活&#xff0c;当这个神经元接收到的信息是有用或无用的时候&#xff0c;激活函数决定了对这个神经元接收到的信息是留下还是抛弃。如果不加激活函数&#xff0c;神经元仅仅做线性变换&#xff0c;那么该神经网…

【C++】priority_queuepriority_queue模拟实现

个人主页 &#xff1a; zxctscl 如有转载请先通知 文章目录 1. priority_queue的介绍2. priority_queue的使用3. 函数模板与类模板4. 仿函数5. priority_queue模拟实现5.1 push5.2 pop5.3 empty5.4 size5.5 top5.6 仿函数实现大小堆5.7 实现自定义类型的优先级队列 6. 附模拟实…

Linux的启动过程,了解一下?

Linux 系统启动过程 linux启动时我们会看到许多启动信息。 Linux系统的启动过程并不是大家想象中的那么复杂&#xff0c;其过程可以分为5个阶段&#xff1a; 内核的引导。运行 init。系统初始化。建立终端 。用户登录系统。 init程序的类型&#xff1a; SysV: init, CentO…

Linux系统编程开发环境搭建

开发环境搭建 桥接网络&#xff08;Bridged Network&#xff09;、网络地址转换&#xff08;NAT, Network Address Translation&#xff09;和主机模式网络&#xff08;Host-only Networking&#xff09; 在虚拟化环境中&#xff0c;常见的三种网络模式是桥接网络&#xff08…

好用的Python开发工具合集

​ Python是一种功能强大且易于学习的编程语言&#xff0c;被广泛应用于数据科学、机器学习、Web开发等领域。随着Python在各个领域的应用越来越广泛&#xff0c;越来越多的Python开发工具也涌现出来。但是&#xff0c;对于新手来说&#xff0c;选择一款合适的Python开发工具可…

OpenHarmony开发实例:【鸿蒙.bin文件烧录】

使用HiBurn烧录鸿蒙.bin文件到Hi3861开发板 鸿蒙官方文档的“Hi3861开发板第一个示例程序”中描述了——如何使用DevEco Device Tool工具烧录二进制文件到Hi3861开发板&#xff1b; 本文将介绍如何使用HiBurn工具烧录鸿蒙的.bin文件到Hi3861开发板。 获取HiBurn工具 通过鸿蒙…

云仓酒庄品酒师培训破大世界基尼斯纪录,市场专业化趋势势如破竹

近日&#xff0c;云仓酒庄举办的品酒师培训活动成功创下大世界基尼斯纪录&#xff0c;这一荣誉不仅彰显了云仓酒庄在酒类培训领域的专业实力&#xff0c;更折射出酒类市场专业化趋势的势如破竹。随着酒类市场的日益成熟和消费者品鉴需求的提升&#xff0c;酒类市场专业化趋势对…

通义千问:官方开放API开发基础

目录 一、模型介绍 1.1主要模型 1.2 计费单价 二、前置条件 2.1 开通DashScope并创建API-KEY 2.2 设置API-KEY 三、基于DashScope SDK开发 3.1 Maven引入SDK 3.2 代码实现 3.3 运行代码 一、模型介绍 通义千问是由阿里云自主研发的大语言模型&#xff0c;用于理解和分…

Vitis HLS 学习笔记--BLAS库之WideType

目录 1. WideType 数据类型 2. WideType 类模板参数 2.1 SFINAE技术 3. WideType 类中的函数 3.1 operator[](unsigned int p_Idx) 3.2 operator(const WideType& p_w) const 3.3 getValAddr() 3.4 operator const t_TypeInt() 4. 总结 1. WideType 数据类型 在 …