👩🏽‍💻个人主页:阿木木AEcru

🔥 系列专栏:《Docker容器化部署系列》 《Java每日面筋》

💹每一次技术突破,都是对自我能力的挑战和超越。

在这里插入图片描述

一、 MongoDB简介

MongoDB是一个开源的NoSQL文档型数据库,它使用灵活的文档模型来存储数据,这些文档可以是嵌套的,类似于JSON对象。MongoDB以其高性能、高可用性和易扩展性而闻名,适用于各种规模的应用,从小型项目到大型企业级应用。

1.1 适用场景

网站数据:MongoDB 非常适合处理网站的实时数据,包括用户会话、页面点击流、用户活动日志等。它支持高并发的读写操作,适合处理大量用户请求和实时数据更新。

缓存:由于其高性能的特性,MongoDB 可以作为应用程序的缓存层,减轻后端数据库的压力。它可以存储大量的缓存数据,提高数据访问速度,优化系统性能。

大数据和分析:MongoDB 可以存储和处理大规模的数据集,适合进行复杂的数据分析和处理。它的聚合框架提供了强大的数据处理能力,可以执行复杂的数据聚合操作。

内容管理系统(CMS):MongoDB 的文档型结构非常适合存储和查询内容相关的数据,如文章、图片、视频等。它的灵活的数据模型和强大的查询语言使得内容管理变得更加高效。

物联网(IoT):MongoDB 可以处理来自传感器和设备的大量时序数据。它支持地理空间索引,适合处理地理位置相关的数据。

移动应用:MongoDB 可以作为移动应用的后端数据库,存储用户数据、应用配置和实时数据。它的可扩展性和高可用性确保了移动应用的稳定运行。

1.2 应用案例

京东:中国著名的电商平台,使用 MongoDB 存储商品信息,支持比价和关注功能。

赶集网:中国著名的分类信息网站,使用 MongoDB 记录页面浏览量(PV)计数。

奇虎360: 著名的病毒软件防护和移动应用平台,使用 MongoDB 支撑的 HULK 平台每天接受 200 亿次的查询。

百度云:使用 MongoDB 管理百度云盘中 500 亿条关于文件源信息的记录。

CERN:著名的粒子物理研究所,欧洲核子研究中心大型强子对撞机的数据使用 MongoDB 存储。

纽约时报:领先的在线新闻门户网站之一,使用 MongoDB 存储和处理新闻内容和用户数据。

二、 Docker部署MongoDB

2.1 拉取MongoDB镜像

 docker pull mongo

2.2 创建持久化文件夹

mkdir -p /usr/local/mongodb/data

2.3 启动MongoDB容器

docker run  --restart=always -itd --name mongo -v /usr/local/mongodb/data:/data/db -p 27017:27017 mongo:latest --auth

2.4 配置账号密码

进入容器

docker exec -it mongo bash

进入MongoDB控制台

mongo admin

创建用户

db.createUser({user:'root',pwd:'root',roles:[{role:"root", db:"admin"},'readWrite']});

连接MongoDB

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

2.5 开放防火墙端口

sudo firewall-cmd --zone=public --add-port=27017/tcp --permanent
sudo firewall-cmd --reload
注:如果是使用的云服务器,安全组也需要开放此端口。

2.6 工具连接测试

三、SpringBoot整合MongoPlus

3.1 MongoPlus是什么

Mongo-Plus是一个 MongoDB 的操作工具,可和现有mongoDB框架结合使用,为简化开发、提高效率而生。可以理解成Mongo版的MybatisPlus,用法是差不多的。

特性如下:

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持主键自动生成:支持多达 5 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  • 支持自定义全局通用操作:支持全局通用方法注入

3.2 引入maven依赖

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

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
<!--			<scope>test</scope>-->
		</dependency>

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

		<!--mongoPlus-->
		<dependency>
			<groupId>com.gitee.anwena</groupId>
			<artifactId>mongo-plus-boot-starter</artifactId>
			<version>2.0.8.3</version>
		</dependency>
</dependencies>

3.3 yml配置文件

# mongo配置
mongo-plus:
  data:
    mongodb:
      host: 127.0.0.1   #部署mongodb机器的ip
      port: 27017   #端口
      database: test    #数据库名
      username: root    #用户名,没有可不填(若账号中出现@,!等等符号,不需要再进行转码!!!)
      password: root    #密码,同上(若密码中出现@,!等等符号,不需要再进行转码!!!)
      authenticationDatabase: admin     #验证数据库
      connectTimeoutMS: 50000   #在超时之前等待连接打开的最长时间(以毫秒为单位)

3.4 Controller代码


@RestController
@RequestMapping("/mini/user")
@RequiredArgsConstructor
public class MiniUserController {

    private final MiniUserService miniUserService;

    //获取用户列表
    @GetMapping("/list")
    public R getUserList()
    {
        List<MiniUser> list = miniUserService.list();
        return R.ok(list);
    }

    //新增用户
    @PostMapping("/add")
    public R addUser() {
        //由于是测试我就随机生成用户信息了
        MiniUser user = new MiniUser();
        user.setName(RandomUtil.randomString(16));
        user.setAge(RandomUtil.randomLong(18,100));
        user.setEmail(RandomUtil.randomNumbers(10)+"@qq.com");
        boolean save = miniUserService.save(user);
        return R.ok(save);
    }

    //新增用户
    @DeleteMapping("/{id}")
    public R deleteUser(@PathVariable("id") String id) {
        boolean delete = miniUserService.removeById(id);
        return R.ok(delete);
    }


}

3.5 service代码

public interface MiniUserService extends IService<MiniUser> {
        
}
@Service
public class MongoServiceImpl extends ServiceImpl<MiniUser> implements MiniUserService {
    
}

3.6 测试结果

这样一个简单的案例也就完成啦!

四、结尾

感谢您的观看! 如果本文对您有帮助,麻烦用您发财的小手点个三连吧!您的支持就是作者前进的最大动力!再次感谢!

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐