springboot集成MongoDB并在代码中实现增删改查相关语法

在项目中使用MongoDB文档数据库很频繁,存储一些非结构化数据、第三方回调数据、日志、以及一些不是那么实时需要的数据等等,当然document也可以是结构化的数据;

在职场中会有一些新入职的同事或者同为程序员的小伙伴初用MongoDB不太了解如何入手,下面就介绍一下springboot集成MongoDB并进行增删改查相关操作

1、在springboot中引入MongoDB依赖

bash 复制代码
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
            <version>2.3.4.RELEASE</version>
        </dependency>

2、配置文件配置mongo数据库连接

bash 复制代码
spring.data.mongodb.uri=mongodb://root:123456@localhost:27017/test

root:数据库账号

123456:数据库密码 搭建数据库密码尽量复杂

localhost:数据库ip,可替换具体部署服务器公网ip

27017:数据库开放端口,可映射为其它端口提高安全性

test:数据库名

3、创建Mongo实体类并映射具体集合

bash 复制代码
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;

import java.io.Serializable;

/**
 * @desc: 登录日志
 * @Author: nuoyi
 * @Date: 2023/11/13 10:47 下午
 */
@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
@Document("NuoYi_Login_Log")
public class LoginLogPo implements Serializable {
	/**
	* 主键id 自动映射到_id
	*/
	@MongoId
    private String id;
    /**
     * 用户名
     */
    @Field(value = "accountName")
    private String accountName;
    /**
     * 用户Id
     */
    @Field(value = "accountId")
    private Integer accountId;
    /**
     * 手机号
     */
    @Field(value = "mobile")
    private String mobile;

    /**
     * 登录时间
     */
    @Field(value = "loginTime")
    private String loginTime;

    /**
     * 状态码
     */
    @Field(value = "stateCode")
    private Integer stateCode;

    /**
     * 登录IP
     */
    @Field(value = "host")
    private String host;

}

4、对mongo集合进行增删改查

新增

bash 复制代码
            private final MongoTemplate mongoTemplate;


            // 构建日志对象  
            BehaviorLogPo behaviorLogPo = BehaviorLogPo.builder()
                    .requestIp(IPUtil.getIpAddr(getHttpServletRequest()))
                    .accountName(accountInfo.getName())
                    .mobile(accountInfo.getMobile())
                    .interfaceReturnResult(getResultJsonStr(result))
                    .apiDoc(apiDesc.apiMode() + " -> " + apiDesc.apiName())
                    .interfaceOperationType(apiDesc.operateType().name())
                    .requestType(httpServletRequest.getMethod())
                    .build();

            // 存到mongo里边去
            mongoTemplate.save(behaviorLogPo);

删除

bash 复制代码
			Query query1 = new Query();
            query1.addCriteria(Criteria.where("_id").is(1));
            mongoTemplate.findAndRemove(query1,BehaviorLogPo.class);

修改

bash 复制代码
						Query query1 = new Query();
                        query1.addCriteria(Criteria.where("_id").is(t.getId()));
                        Update update = new Update();
                        update.set("accountId", 1);
                        UpdateResult updateResult = mongoTemplate.updateFirst(query, update, 	BehaviorLogPo.class);

查询(分页、包含、等于、模糊、时间范围)

bash 复制代码
	    /**
	     * mongo 模糊查询正则表达式
	     */
    	private final String reg = "^.*%s.*$";

		Query query = new Query();
        // 构建分页对象
        Pageable pageable = PageRequest.of(0, 5000);
        query.addCriteria(Criteria.where("stateCode").in((Object) null));
        query.addCriteria(Criteria.where("host").is("127.0.0.1");
        query.addCriteria(Criteria.where("mobile").regex(Pattern.compile(String.format(reg, req.getUserPhone()), Pattern.CASE_INSENSITIVE)));
        String startTime = "2023-01-06 00:00:00";
        String endTime = "2023-12-06 23:59:59";

        query.addCriteria(Criteria.where("loginTime").gt(startTime).lt(endTime));
        query.with(pageable).with(Sort.by(Sort.Order.asc("loginTime")));

        List<BehaviorLogPo> dataWaitHandle = mongoTemplate.find(query, AICallInfoLog.class, "NuoYi_Login_Log");

简单的相关操作就掌握啦

springboot中使用Java代码进行MongoDB集合数据备份
docker搭建mongodb并挂载外部文件
docker内部署MongoDB授权数据库账号权限

相关推荐
qq_12498707537 小时前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计
Coder_Boy_7 小时前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
2301_818732067 小时前
前端调用控制层接口,进不去,报错415,类型不匹配
java·spring boot·spring·tomcat·intellij-idea
汤姆yu11 小时前
基于springboot的尿毒症健康管理系统
java·spring boot·后端
暮色妖娆丶11 小时前
Spring 源码分析 单例 Bean 的创建过程
spring boot·后端·spring
biyezuopinvip12 小时前
基于Spring Boot的企业网盘的设计与实现(任务书)
java·spring boot·后端·vue·ssm·任务书·企业网盘的设计与实现
JavaGuide12 小时前
一款悄然崛起的国产规则引擎,让业务编排效率提升 10 倍!
java·spring boot
figo10tf13 小时前
Spring Boot项目集成Redisson 原始依赖与 Spring Boot Starter 的流程
java·spring boot·后端
zhangyi_viva13 小时前
Spring Boot(七):Swagger 接口文档
java·spring boot·后端
橙露13 小时前
Spring Boot 核心原理:自动配置机制与自定义 Starter 开发
java·数据库·spring boot