使用Docker安装MongoDB,整合SpringBoot

news2025/1/16 19:03:34

使用Docker安装MongoDB

MongoDB 和 MySQL 都是常用的数据库管理系统,但它们的设计目标不同,因此在某些方面的性能表现也有所不同。

MongoDB 是一个文档型数据库,它采用了面向文档的数据模型,支持动态查询和索引,适合存储非结构化和半结构化数据。它使用了基于BSON(Binary JSON)的数据格式,支持数据的自动分片和高可用性,可通过多台服务器横向扩展性能。

MySQL 是一个关系型数据库,它采用了传统的关系型数据模型,支持 SQL 语言和事务,适合存储结构化数据。它使用了基于表格的数据格式,支持多种存储引擎和索引类型,可以通过垂直和水平两种方式扩展性能。

在性能方面,MongoDB 在处理大量非结构化数据和高并发读写请求时具有优势。MongoDB 支持分片和副本集来实现高可用性和负载均衡,可以横向扩展,具有较好的读写性能。但在一些特定的查询场景下,MySQL 的性能可能更好,特别是涉及复杂的关联查询和聚合操作时。

总的来说,选择 MongoDB 还是 MySQL 应该基于具体的应用场景和数据特征。如果你的应用需要存储大量非结构化数据或需要高并发读写,那么 MongoDB 可能更适合;如果你需要进行复杂的关联查询或聚合操作,那么 MySQL 可能更适合。

安装MongoDB

1、拉取镜像

docker pull mongo

2、为了确保数据安全,需要创建一个目录保存MongoDB的数据

 mkdir /root/sifan/mongo

3、启动MongoDB镜像

docker run -itd --name mongo -v /root/sifan/mongo:/data/db -p 27017:27017 mongo --auth

4、创建用户

# 进入MongoDB容器的admin数据库
docker exec -it mongo mongo admin
# 创建用户
db.createUser({ user:'root',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},'readWriteAnyDatabase']});

测试创建的用户
测试连接用户

db.auth('root', '123456')

输出1表示用户认证成功
在这里插入图片描述测试插入数据

db.user.insert({"name":"dzl","age":20}

测试查询

db.user.find()

测试navicat连接
在这里插入图片描述

整合SpringBoot

依赖

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

创建超级管理员

# 切换到admin数据库
use admin
# 认证
db.auth('root', '123456')
# 创建超级管理员,用与SpringBoot连接
db.createUser({ user:'admin',pwd:'admin',roles:["root"]});

配置(连接MongoDB上的超级管理员)

spring:
  data:
    mongodb:
      host: xxx.xxx.xxx.xx
      port: 27017
      database: db_sifan_erp
      authentication-database: admin
      username: admin
      password: admin

测试

import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
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;

/**
 * @Author : dengzhilin
 * @create 2023/2/28 11:20
 */
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class TestMongodb {
    @Resource
    private MongoTemplate mongoTemplate;

    /**
     * 保存
     */
    @Test
    public void save() {
        Student student = new Student();
        student.setId(100);
        student.setName("张三");
        student.setAge(18);
        // 保存
        mongoTemplate.save(student);
    }

    /**
     * 删除*
     */
    @Test
    public void delete() {
        // 创建查询
        Query query = new Query();
        Criteria criteria = new Criteria();
        // 设置条件:id为100
        criteria.and("id").is(100);
        //将条件添加到查询内
        query.addCriteria(criteria);
        // 调用remove(),进行删除
        DeleteResult res = mongoTemplate.remove(query, Student.class);
        System.out.println(res);
    }

    /**
     * 更新*
     */
    @Test
    public void update() {
        //创建查询
        Query query = new Query();
        Criteria criteria = new Criteria();
        // 设置查询条件,id为100
        criteria.and("id").is(100);
        query.addCriteria(criteria);
        //创建Update,修改字段 把age修改为200,name修改为李四
        Update update = new Update().set("age", 200).set("name", "李四");
        //执行修改操作,返回更新结果,包含更新的数据条数
        UpdateResult res = mongoTemplate.updateFirst(query, update, Student.class);

        System.out.println(res);
    }

    /**
     * 查询*
     */
    @Test
    public void select() {
        Query query = new Query();
        Criteria criteria = new Criteria();
        criteria.and("id").is(100);
        query.addCriteria(criteria);
        Student student = mongoTemplate.findOne(query, Student.class);
        System.out.println(student);
    }
}

@Data
@EqualsAndHashCode
@NoArgsConstructor
@AllArgsConstructor
@Document(value = "tb_student")
class Student {
    @Id
    private Integer id; //mongoDB推荐使用id,也可以自己指定一个字段作为主键
    @Field("student_name")
    private String name;
    @Field("age")
    private Integer age;
}

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

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

相关文章

Docker部署实战

文章目录Docker部署应用准备制作容器镜像启动容器上传镜像docker exec数据卷&#xff08;Volume&#xff09;声明原理实践Docker部署 应用准备 这一次&#xff0c;我们来用 Docker 部署一个用 Python 编写的 Web 应用。这个应用的代码部分&#xff08;app.py&#xff09;非常…

【同步、共享和内容协作软件】上海道宁与​ownCloud让您的团队随时随地在任何设备上轻松处理数据

ownCloud是 一款开源文件同步、共享和 内容协作软件 可让团队随时随地 在任何设备上轻松处理数据 ownCloud开发并提供 用于内容协作的开源软件 使团队能够轻松地无缝 共享和处理文件 而无需考虑设备或位置 开发商介绍 ownCloud成立于2010年&#xff0c;是一个托管和同…

设计模式-笔记

文章目录七大原则单例模式桥模式 bridge观察者模式 observer责任链模式 Chain of Responsibility命令模式 Command迭代器模式 Iterator中介者模式 Mediator享元模式 Flyweight Pattern组合模式 composite装饰模式 Decorator外观模式 Facade简单工厂模式工厂方法模式工厂抽象模式…

Postgresql中的unlogged table

在PG中&#xff0c;有一种表的类型为unlogged table&#xff0c;名如其字&#xff0c;该种类型的表不会写入wal日志中&#xff0c;所以在写入的速度上比普通的堆表快很多&#xff0c;但是该表在数据库崩溃的时候&#xff0c;会被truncate,数据会丢失&#xff0c;而且该表也不支…

Leetcode21. 合并两个有序链表

一、题目描述&#xff1a; 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4]输出&#xff1a;[1,1,2,3,4,4] 示例 2&#xff1a; 输入&#xff1a;l1 [], l2…

Java程序开发中如何使用lntelliJ IDEA?

完成了IDEA的安装与启动&#xff0c;下面使用IDEA创建一个Java程序&#xff0c;实现在控制台上打印HelloWorld!的功能&#xff0c;具体步骤如下。 1.创建Java项目 进入New Project界面后&#xff0c;单击New Project选项按钮创建新项目&#xff0c;弹出New Project对话框&…

【k8s】Kubernetes的学习(1.k8s概念和架构)

目录 1.首先要知道&#xff0c;Kubernetes为什么简称为k8s? 2.Kubernetes概述 2.1 kubernetes基本介绍 2.2 kubernetes的特性 2.3 kubernetes集群架构组件 2.3.1 Master (主控节点) 2.3.2 node (工作节点) 2.4 k8s核心概念 2.4.1 Pod 2.4.2 controller 2.4.3 Se…

操作系统权限提升(十九)之Linux提权-SUID提权

系列文章 操作系统权限提升(十八)之Linux提权-内核提权 SUID提权 SUID介绍 SUID是一种特殊权限&#xff0c;设置了suid的程序文件&#xff0c;在用户执行该程序时&#xff0c;用户的权限是该程序文件属主的权限&#xff0c;例如程序文件的属主是root&#xff0c;那么执行该…

redux-saga

redux-saga 官网&#xff1a;About | Redux-Saga 中文网&#xff1a;自述 Redux-Saga redux-saga 是一个用于管理 异步获取数据(副作用) 的redux中间件&#xff1b;它的目标是让副作用管理更容易&#xff0c;执行更高效&#xff0c;测试更简单&#xff0c;处理故障时更容易… …

C#:Krypton控件使用方法详解(第十讲) ——kryptonColorButton

今天介绍的Krypton控件中的kryptonColorButton&#xff0c;下面介绍这个控件的外观属性&#xff1a;Cursor属性&#xff1a;表示鼠标移动过该控件的时候&#xff0c;鼠标显示的形状。属性值如下图所示&#xff1a;EmptyBorderColor属性&#xff1a;表示当所选颜色为空时&#x…

七、JUC并发工具

文章目录JUC并发工具CountDownLatch应用&源码分析CountDownLatch介绍CountDownLatch应用CountDownLatch源码分析有参构造await方法countDown方法CyclicBarrier应用&源码分析CyclicBarrier介绍CyclicBarrier应用CyclicBarrier源码分析CyclicBarrier的核心属性CyclicBarr…

echarts实现知识图谱,生产项目

echarts实现知识图谱&#xff0c;生产项目内容简介效果演示代码逻辑结束语内容简介 在实际生产项目中&#xff0c;需要对后端知识数据进行展示。需求如下&#xff1a; 点击节点可以展示与此节点相关的节点信息右键点击节点可以对节点的信息进行修改悬浮在节点上可以查看节点的…

通用人工智能(AGI):人工智能的下一个阶段

除了人工智能(AI)的改进和新应用之外&#xff0c;大多数人都认为&#xff0c;当通用人工智能(AGI)出现时&#xff0c;人工智能的下一次飞跃将发生。我们将AGI宽泛地定义为机器或计算机程序理解或学习人类可以完成的任何智力任务的假设能力。然而&#xff0c;对于何时以及如何实…

系统性能测试指标

性能测试的目的 1.评估系统的能力&#xff0c;测试中得到的负荷和响应时间数据可以被用于验证所计划的模型的能力&#xff0c;并帮助作出决策。 2.识别体系中的弱点&#xff1a;受控的负荷可以被增加到一个极端的水平&#xff0c;并突破它&#xff0c;从而修复体系的瓶颈或薄…

leetcode: Swapping Nodes in a Linked List

leetcode: Swapping Nodes in a Linked List1. 题目描述2. 题目解答3. 总结1. 题目描述 You are given the head of a linked list, and an integer k.Return the head of the linked list after swapping the values of the kth node from the beginning and the kth node f…

ECMAScript 详解

ECMAScript 历史我们首先来看 ECMA 是什么。ECMA&#xff0c;是欧洲计算机制造商协会&#xff08;European Computer Manufacturers Association&#xff09;的简称&#xff0c;是一家国际性会员制度的信息和电信标准组织。1994 年之后&#xff0c;由于组织的标准牵涉到很多其他…

【Leetcode 剑指Offer】第 6 天 搜索与回溯算法(简单)

搜索与回溯剑指 Offer 32 - I. 从上到下打印二叉树层序遍历 广搜 BFScollections双端队列 deque剑指 Offer 32 - II. 从上到下打印二叉树 II剑指 Offer 32 - III. 从上到下打印二叉树 III剑指 Offer 32 - I. 从上到下打印二叉树 题;从上到下打印出二叉树的每个节点&#xff0c…

单通道说话人语音分离——DPRNN(Dual-Path Recurrent Neural Network)

参考文献&#xff1a;《DUAL-PATH RNN: EFFICIENT LONG SEQUENCE MODELING FOR TIME-DOMAIN SINGLE-CHANNEL SPEECH SEPARATION》 DPRNN网络是Con-Tasnet的改进网络 Con-Tasnet介绍详情请看上一篇文章 单通道说话人语音分离——Conv-TasNet(Convolutional Time-domain audio…

应用程序性能优化方案,web服务五级缓存优化,服务器性能优化...

winfrom 全局异常捕获WPF 全局异常捕获Asp.Net全局异常捕获MVC 全局异常捕获AspNetNetCore 全局异常捕获一级缓存html/css/js 前端缓存二级缓存Asp.Net MVC AspNetCore 客户端缓存设置三级缓存服务端缓存四级redis 数据库缓存服务端缓存五级sqlserver 数据库缓存设置分布式缓存…

2023年湖北建设厅资料员证怎么考需要什么条件?启程别

2023年湖北建设厅资料员证怎么考需要什么条件&#xff1f;启程别 湖北资料员目前已经开始组织考试了&#xff0c;各位想要考资料员的现在可以开始准备报考相关准备工作了。资料员怎么考需要什么条件&#xff1f;启程别告诉你 建设厅资料员证怎么考 网报&#xff1a;七大员全国…