微服务MongoDB解析部署使用全流程

目录

1、什么是MongoDB

1、非关系型数据库

2、非关系型数据库分类

3、MongoDB?bson格式什么样?

2、MongoDB的优势

3、MongoDB应用场景

4、术语

5、操作

1、安装MongoDB

1、查询镜像文件【不操作】

2、拉取镜像文件

3、创建数据挂载目录

4、启动容器

2、验证安装成功

1、命令及说明

3、删除用户【不操作】

1、命令及说明

4、Navicat连接

5、insert

6、find

7、delete

8、update

9、其他操作【了解】

6、SpringBoot整合

1.添加依赖

2.添加配置

3.编写Entry

4.编写DAO

5.编写DAOImpl

6.编写测试类Test

7.编写启动类


1、什么是MongoDB

1、非关系型数据库

NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在处理web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,出现了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,特别是大数据应用难题。

2、非关系型数据库分类

键值(Key-Value)存储数据库

类似于HashMap的方式,例如redis

列存储数据库

以列为概念的,用于处理大数据量的数据,例如HBase

文档型数据库

是应用比较广泛的,以文档形式处理数据的,文档不是硬盘上直接对应的文件,是个概念,例如MongoDB

图形(Graph)数据库

Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。

3、MongoDB?bson格式什么样?

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

JSON的BSON格式‌是一种二进制表示的数据交换格式,它是“Binary JSON”的缩写。

2、MongoDB的优势

  • 简单性,应用起来比较容易,易上手

  • 扩展性,指的是mango本身的拓展,比如说可以做分片模式集群等等

  • 高性能,在Wiretiger存储引擎的加持下,数据的读写可以做到更大的吞吐量

  • 高可用,自身出现故障的情况很少,也可以通过集群的方式再提供高可用性,还支持故障转移

  • 存文件,mongo天然支持文件存储,以桶的形式,用的对象是GridFS,文件会被切割成多个16M大小存储

3、MongoDB应用场景

它的应用场景非常广泛,存储数据、读写网站数据、文件存储、日志存储、缓存等。

从数据角度说,mongo关注是未来数据量。

从需求角度说,mongo关注是未来的拓展和维护。

4、术语

mongo从5版本对事务的支持更好,以后工作用的一定是5版本及以上的。

我们学习用4版本,是因为很多电脑安装不了5版本,受硬件影响。4版本和5版本在操作上没有什么大区别,学习不影响。

5、操作

1、安装MongoDB

基于docker的安装,版本号4.4.18

1、查询镜像文件【不操作】

docker search mongo

2、拉取镜像文件

docker pull mongo:4.4.18

3、创建数据挂载目录

mkdir -p /usr/local/docker/mongodb/datacd /usr/local/docker/mongodbchmod 777 data

4、启动容器

docker run -d \--name mongodb \--privileged \-p 27017:27017 \-v /usr/local/docker/mongodb/data:/data/db \-e MONGO_INITDB_ROOT_USERNAME=root \-e MONGO_INITDB_ROOT_PASSWORD=123456 \mongo:4.4.18 mongod --auth

看到此基就启动成功了

--privileged:以真正的有权限方式启动

MONGO_INITDB_ROOT_USERNAME:设置账户

MONGO_INITDB_ROOT_PASSWORD:设置密码

2、验证安装成功

1、命令及说明

# 1.进入容器

docker exec -it mongodb /bin/bash

# 2.查看版本

mongo --version


# 3.以root用户登录mongo,-p是密码,--port是端口号,--authenticationDatabase是验证权限的数据库
 

mongo --port 27017 -u "root" -p "123456" --authenticationDatabase "admin"  


# 4.展示所有的数据库
 

show dbs


# 5.切换到dz14b数据库

use dz14b


# 6.创建一个用户,用户名是user01,密码是123456,角色是读写角色,作用在dz14b数据库上

db.createUser({user:"user01", pwd:"123456",roles: [{role:"readWrite", db:"dz14b"}]})


# 7.查看所有的用户数据

show users


# 8.退出mongodb数据库

exit

# 9.退出mongodb容器

exit


# 10.再次进入容器,以mongo命令进入,进入到dz14b数据库中

docker exec -it mongodb mongo dz14b


# 11.查看当前在那个数据库

db

# 12.查看数据库,发现没有其他数据库,我们已经再dz14b了,所以查询不到其他数据库

show dbs


# 13.授权

db.auth("user01", "123456")

# 14.查看数据库,发现没有,授权影响不到用户的作用范围

show dbs

# 15.因为没有权限报错了

show users


# 16.向dz(dz自定义的名字)集合插入了一个文档,数据是inser方法的参数。对照sql理解:向dz表插入一条记录

db.dz.insert({name:"zhangsan"})

# 17.查询dz集合下所有的数据

db.dz.find()

【第1,2,3步骤】

【第4-9步骤】

【第10-17步骤】

3、删除用户【不操作】

1、命令及说明

# 进入docker容器
docker exec -it mongodb /bin/bash
# 以root用户登录mongo,-p是密码,--port是端口号,--authenticationDatabase是验证权限的数据库
mongo --port 27017 -u "root" -p "123456" --authenticationDatabase "admin"  
# 切换到dz12b数据库
use dz12b
# 查看所有的用户数据
show users
# 切换到admin数据库
user admin
# 授权
db.auth("root", "123456")
# 删除用户,用户信息再system.users下,remove是一个命令
db.system.users.remove({user:"user01"})
# 重新进入mongo,验证删除成功
exit
mongo --port 27017 -u "root" -p "123456" --authenticationDatabase "admin"  
use dz7b
show users

4、Navicat连接

5、insert

db.dz.insert({name:"菲菲", age:20,sex:"女"});
db.dz.insert({name:"张三",sex:"男"});
db.dz.insert({name:"王五",sex:"男",hiredate:"2024-12-14"});

db.dz.save({name:"菲菲", age:20,sex:"女"});
db.dz.save({name:"张三",sex:"男"});
db.dz.save({name:"王五",sex:"男",hiredate:"2024-12-14"});

insert和save的区别:

如果设置了id字段,id不重复二者没有区别,都是新增一条数据,如果id重复,insert会报错,save执行修改操作。

【执行insert语句同时 创建集合“表”】

db.dz.insert({_id:ObjectId("66f4b95c904baf343400254d"),name:"高波",age:20})
db.dz.save({_id:ObjectId("66f4b95c904baf343400254d"),name:"高波",age:20})

6、find

db.dz.find({age : 20} )
db.dz.find({age : {$gt : 21}})
db.dz.find({age:{$gt : 21},name:'张三'})

7、delete

db.dz.deleteOne({age:20})
db.dz.deleteMany({age:20})

deleteOne是删除按照条件查询到的第一条数据

deleteMany是删除所有符合条件的记录

8、update

db.dz.updateOne({age:25},{$set:{age:20}}
)db.dz.updateMany({age:25},{$set:{age:20}}
)

updateOne是修改按照条件查询到的第一条数据

updateMany是修改所有符合条件的记录

9、其他操作【了解】

# 查看所有数据库
show dbs
# 应用到指定数据库
use databasename
# 查看数据库下的集合
show collections
# 创建集合
db.createCollection("test_collection")
# 删除集合,test_collection是集合的名字
db.test_collection.drop()

6、SpringBoot整合

1.添加依赖

  <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.13</version></parent><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.6.13</spring-boot.version><jwt.version>0.7.0</jwt.version><fastjson.version>1.2.60</fastjson.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>compile</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--json--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>${fastjson.version}</version><scope>compile</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><classifier>exec</classifier></configuration></plugin></plugins></build>

2.添加配置

#username: user01 虚拟机数据库名
#database: 自己数据库的名字
#port: 27017  虚拟机中自己定义的
#host: 192.168.146.128  虚拟机ip
spring:data:mongodb:username: user01password: '123456'port: 27017host: 192.168.146.128database: dz14b

mongodb配置有两种方式,如果第一种不生效,可以用第二种尝试一下

spring:data:mongodb:uri: mongodb://user01:123456@192.168.1.101:27017/dz12b

3.编写Entry

package com.jr.entry;import lombok.Data;
import org.springframework.data.annotation.Id;@Data
public class User {@Idprivate String id;private String name;private String password;
}

4.编写DAO

package com.jr.dao;import com.jr.entry.User;import java.util.List;public interface UserDao {/*** 新增** @param user 目标对象*/void insert(User user);/*** 删除** @param id 对象主键*/void delete(String id);/*** 修改** @param user 目标对象*/void update(User user);/*** 通过主键查询** @param id 主键* @return user对象*/User findById(String id);/*** 查询** @param user 条件对象* @return user集合*/List<User> query(User user);}

5.编写DAOImpl

MongoTemplate常用方法:

 mongoTemplate.insert(user);  //添加user对象
 mongoTemplate.findById(id, User.class);  //根据主键id,查询单个user对象。
 mongoTemplate.remove(user);  //删除指定user对象
 mongoTemplate.remove(条件对象Query, User.class);   // 删除符合条件的user对象
 mongoTemplate.updateMulti(条件对象query, 修改对象update, User.class);  //修改符合条件的user对象
 mongoTemplate.find(条件对象query, User.class);  //查询符合条件的user对象

条件对象Query常用方法:

#将构建好的查询条件添加到查询对象中
query.addCriteria(Criteria.where("_id").is(id));

Criteria常用方法:

#用于定义查询条件的接口,它提供了一系列的方法来构建复杂的查询条件。
Criteria.where("_id").is(id);

修改对象Update常用方法:

update.set("password", user.getPassword());

测试代码:

package com.jr.dao.impl;
import com.jr.dao.UserDao;
import com.jr.entry.User;
import org.springframework.beans.factory.annotation.Autowired;
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.stereotype.Repository;
import java.util.List;@Repository
public class UserDaoImpl implements UserDao {@Autowiredprivate MongoTemplate mongoTemplate;@Overridepublic void insert(User user) {mongoTemplate.insert(user);}@Overridepublic User findById(String id) {return mongoTemplate.findById(id, User.class);}//    @Overridepublic void delete1(String id) {User user = findById(id);if (user != null) {mongoTemplate.remove(user);} else {System.out.println("没有找到要删除的数据!");}}@Overridepublic void delete(String id) {Query query = new Query();query.addCriteria(Criteria.where("_id").is(id));mongoTemplate.remove(query, User.class);}@Overridepublic void update(User user) {Query query = new Query();query.addCriteria(Criteria.where("_id").is(user.getId()));Update update = new Update();update.set("name", user.getName());update.set("password", user.getPassword());mongoTemplate.updateMulti(query, update, User.class);}@Overridepublic List<User> query(User user) {Query query = new Query();if(user.getId() != null){query.addCriteria(Criteria.where("_id").is(user.getId()));}if(user.getName() != null){query.addCriteria(Criteria.where("name").is(user.getName()));}if(user.getPassword() != null){query.addCriteria(Criteria.where("password").is(user.getPassword()));}return mongoTemplate.find(query, User.class);}
}

6.编写测试类Test

package com.jr;
import com.SpringBootMain;
import com.jr.dao.UserDao;
import com.jr.entry.User;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@Slf4j
@SpringBootTest(classes = SpringBootMain.class)
@SuppressWarnings("all")
public class MongoDbTest {@Autowiredprivate UserDao userDao;@Testpublic void testInsert() {User user = new User();user.setPassword("123");user.setName("zhangsan");userDao.insert(user);}@Testpublic void testFindById() {User byId = userDao.findById("661794efd775ee4bd7a6d069");System.out.println(byId);}@Testpublic void testDelete() {userDao.delete("6617970547fbc57ef66a962f");}@Testpublic void testUpdate() {User user = new User();user.setId("661797ee479a0c02f0dd9212");user.setPassword("123456");user.setName("lisi");userDao.update(user);}@Testpublic void testQuery() {User user = new User();
//        user.setId("661797ee479a0c02f0dd9212");user.setPassword("123");
//        user.setName("lisi");System.out.println(userDao.query(user));}}

7.编写启动类

package com;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class SpringBootMain {public static void main(String[] args) {SpringApplication.run(SpringBootMain.class);}
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL_连接查询

课 程 推 荐我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448;入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448;虚 拟 环 境 搭 建 &#xff1a;&#x1…

C# 利用simd比较两个文件是否相等(高性能)

主要用到两个指令集&#xff0c;CompareEqual指令与MoveMask指令&#xff0c;因为电脑cpu原因&#xff0c;我们采用Avx2。 Avx2.CompareEqual&#xff0c;比较两个Vector256<byte>向量&#xff0c;如果元素相同返回255&#xff0c;否则返回0。 Avx2.MoveMask如果Vector…

前端工程规范-3:CSS规范(Stylelint)

样式规范工具&#xff08;StyleLint&#xff09; Stylelint 是一个灵活且强大的工具&#xff0c;适用于保持 CSS 代码的质量和一致性。结合其他工具&#xff08;如 Prettier 和 ESLint&#xff09;&#xff0c;可以更全面地保障前端代码的整洁性和可维护性。 1、安装 VSCode …

xxl-job--03--分片广播 动态分片

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 xxl-job通过分片广播模式前言1.定义什么是分片广播&#xff1a;即xxl-job调度中心发出一次调度&#xff0c;所有相关节点全部执行一次 采用分片广播调度优点 2.API介…

助农小程序|助农扶贫系统|基于java的助农扶贫系统小程序设计与实现(源码+数据库+文档)

助农扶贫系统小程序 目录 基于java的助农扶贫系统小程序设计与实现 一、前言 二、系统功能设计 三、系统实现 5.1.1 农户管理 5.1.2 用户管理 5.1.3 订单统计 5.2.1 商品信息管理 5.3.1 商品信息 5.3.2 订单信息 5.3.3 商品评价 5.3.4 商品退货 四、数据库设计 1、…

基于微信小程序的旧衣回收系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

执行力怎么培养?

执行力怎么培养&#xff1f; 并行&#xff1a;适合在初期养成习惯&#xff0c;不抱对结果的期望天才就是强迫症&#xff1a;适合中期修身&#xff1a;适合高级 并行&#xff1a;适合在初期养成习惯&#xff0c;不抱对结果的期望 在你开始做任何事情的时候&#xff0c;不要一开…

Azure OpenAI检索增强微调:使用 GPT-4o 对 GPT-4o mini 进行微调,以适应特定领域的应用

定制是关键&#xff01; 生成式人工智能对企业最有影响力的应用之一是创建自然语言界面&#xff0c;这些界面经过定制&#xff0c;可以使用特定领域和用例数据来提供更好、更准确的响应。这意味着回答有关特定领域的问题&#xff0c;例如银行、法律和医疗领域。 我们经常谈…

二叉树深搜专题篇

目录 计算布尔二叉树的值 求根节点到叶节点数字之和 二叉树剪枝 验证二叉搜索树 二叉搜索树中第K小的元素 二叉树的所有路径 计算布尔二叉树的值 题目 思路 这道题其实是比较简单的&#xff0c;对二叉树来一次后序遍历即可&#xff0c;当遇到叶子结点直接返回叶子节点中…

OpenAI全新多模态内容审核模型上线:基于 GPT-4o,可检测文本和图像

在数字时代&#xff0c;内容安全问题愈发受到重视。9月26日&#xff0c;OpenAI 正式推出了一款全新的多模态内容审核模型&#xff0c;名为 “omni-moderation-latest”。 该模型基于最新的 GPT-4o 技术&#xff0c;能够准确地识别检测有害文本图像。这一更新将为开发者提供强大…

【Android】页面启动耗时统计流程梳理

文章基于Android 11 写在前面&#xff1a; 最近的文章都会放流程图&#xff0c;时序图之类的图片&#xff0c;解释下为什么这么做&#xff1a; 图片的好处&#xff1a; 流程清晰&#xff0c;一目了然很多代码&#xff0c;如同老太太的裹脚布&#xff0c;又臭又长。影响理解&a…

《开题报告》基于SpringBoot框架的高校专业实习管理系统开题报告的设计与实现源码++学习文档+答辩讲解视频

开题报告 研究背景 在当今高等教育日益普及与深化的背景下&#xff0c;高校专业实习作为学生将理论知识转化为实践能力、提前适应社会工作环境的重要环节&#xff0c;其重要性不言而喻。然而&#xff0c;传统的高校专业实习管理模式往往存在信息不对称、流程繁琐、效率低下、…

AWS Network Firewall - IGW方式配置只应许白名单域名出入站

参考链接 https://repost.aws/zh-Hans/knowledge-center/network-firewall-configure-domain-ruleshttps://aws.amazon.com/cn/blogs/networking-and-content-delivery/deployment-models-for-aws-network-firewall/ 1. 创建防火墙 选择防火墙的归属子网&#xff08;选择公有…

【软件工程】成本效益分析

一、成本分析目的 二、成本估算方法 三、成本效益分析方法 课堂小结 例题 选择题

生信初学者教程(十二):数据汇总

文章目录 介绍加载R包导入数据汇总表格输出结果总结介绍 在本教程中,汇总了三个肝细胞癌(HCC)的转录组数据集,分别是LIRI-JP,LIHC-US/TCGA-LIHC和GSE14520,以及一个HCC的单细胞数据集GSE149614的临床表型信息。这些数据集为科研人员提供了丰富的基因表达数据和相关的临床…

设计模式 策略模式(Strategy Pattern)

策略模式简绍 策略模式&#xff08;Strategy Pattern&#xff09;是一种行为设计模式&#xff0c;它使你能在运行时改变对象的行为。该模式定义了一系列的算法&#xff0c;并将每一个算法封装起来&#xff0c;使它们可以相互替换。策略模式让算法独立于使用它的客户而变化。 …

当前用户添加到 [uucp ]组

archlinux使用tabby 查看当前用户&#xff1a;将当前用户添加到 uucp 组验证组成员身份重新登录 /dev/ttyUSB0 设备的所有者是 root&#xff0c;而所属组是 uucp,如果您想以当前用户身份访问此设备&#xff0c;您可以将当前用户添加到 uucp 组中。 以下是将当前用户添加到 uucp…

初识C语言(三)

感兴趣的朋友们可以留个关注&#xff0c;我们共同交流&#xff0c;相互促进学习。 文章目录 前言 八、函数 九、数组 &#xff08;1&#xff09;数组的定义 &#xff08;2&#xff09;数组的下标和使用 十、操作符 &#xff08;1&#xff09;算数操作符 &#xff08;2&#xff…

C# C++ 笔记

第一阶段知识总结 lunix系统操作 1、基础命令 &#xff08;1&#xff09;cd cd /[目录名] 打开指定文件目录 cd .. 返回上一级目录 cd - 返回并显示上一次目录 cd ~ 切换到当前用户的家目录 &#xff08;2&#xff09;pwd pwd 查看当前所在目录路径 pwd -L 打印当前物理…

Windows安装openssl开发库

1 下载openssl安装包并安装 下载网址&#xff1a; https://slproweb.com/products/Win32OpenSSL.html 下载对应的安装版本。 双击安装包&#xff0c;一路下一步完成安装。注意&#xff1a;1.安装路径不要有空格&#xff1b; 2. 建议不要把DLL拷贝到系统路径。 2 编辑代码 …