MongoDB微服务部署

一、安装MongoDB

1.在linux中拉去MongoDB镜像文件

docker pull mongo:4.4.18

2.

2.创建数据挂载目录

linux命令创建

命令创建目录:

mkdir -p /usr/local/docker/mongodb/data

可以在sshclient工具查看是否创建成功。

 进入moogodb目录,给data赋予权限777

cd /usr/local/docker/mongodbchmod 777 data

我们看看data的权限是否赋予成功,权限赋予成功。

ls -l

3.启动mongodb

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

MONGO_INITDB_ROOT_USERNAME:设置账户

MONGO_INITDB_ROOT_PASSWORD:设置密码

这里用户设置的是root,密码是123456

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

查看一下mongodb是否启动成功

docker ps

有mongodb,说明启动成功。 

二.登录验证mongodb安装成功

1.进入容器

docker exec -it mongodb /bin/bash

 2.查看版本

mongo --version

3.以root用户登录mongodb

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

-p是密码,--port是端口号,--authenticationDatabase是验证权限的数据库

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数据库和退出mongodb容器

exit

9.再次进入容器

以mongo命令进入,进入到dz14b数据库中

docker exec -it mongodb mongo dz14b

10.查看当前在那个数据库 

db

11.展示数据库

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

show dbs

12.授权

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

13.查看数据库

发现没有,授权影响不到用户的作用范围

show dbs

14.展示用户数据

show users

15.插入一个文档 

其实这个操作实际上是在navicat进行创建的

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

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

 

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

db.dz.find()

 

17.删除用户的指令

db.system.users.remove({user:"user01"})

三.与Navicat连接

填完后点左下角的测试连接

连接名自己取,我这里取得是dz14b

 

向其中插入数据 

db.dz.insert({name:"lisi", age:20});
db.dz.save({name:"wangwu", age:25});
db.dz.save({name:"zhangsan", age:25});
db.dz.insert({name:"波波", age:20});
db.dz.save({name:"阿瑟东", age:25});
db.dz.save({name:"阿松i阿瑟东", age:25});
db.dz.insert({_id:ObjectId("63e4c8bdd20e7cc75a36a700"),name:"zhangsan1",age:20})
db.dz.save({_id:ObjectId("63e4c8bdd20e7cc75a36a700"),name:"zhangsan1",age:20})

查看数据

四.与idea项目整合

1.创建idea的maven项目

 

选择右下角的自动auto.

2.导入依赖

在pom.xml文件里添加依赖

   <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>

3.创建并修改配置文件

database是你创建数据库的连接名:我设置的是dz14b.

host是你虚拟机的ip

username和password和本博客目录中的二的第6小点的创建用户相对应。

4.创建实体类

package com.jr.entry;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.stereotype.Component;
@NoArgsConstructor
@AllArgsConstructor
@Component
@Data
public class Emp {@Id
private String id;private Integer empno;private  String ename;private  String job;private  Integer mgr;private  Double sal;private  Double comm;private  String hiredate;private  Integer deptno;
}

5.创建接口

package com.jr.dao;import com.jr.entry.Emp;import java.util.ArrayList;public interface EmpDao {void insert(Emp emp);void delete(String id);void  delete(Emp emp);void update(Emp emp);Emp findEmp(String empno);ArrayList<Emp> findEmps(Emp emp);
}

6.创建实现类

package com.jr.dao.impl;import com.jr.dao.EmpDao;
import com.jr.entry.Emp;
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.ArrayList;@Repository//接口实现类的
public class EmpDapImpl  implements EmpDao {
@Autowired
private MongoTemplate mongoTemplate;@Overridepublic void insert(Emp emp) {}@Overridepublic void delete(String id) {}@Overridepublic void delete(Emp emp) {}@Overridepublic void update(Emp emp) {}@Overridepublic Emp findEmp(String id) {}@Overridepublic ArrayList<Emp> findEmps(Emp emp) {}
}

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

8.创建测试类

package com.jr.test;import com.SpringBootMain;import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest(classes = SpringBootMain.class)
@Slf4j
public class MongoTest {}

 五.四种操作

1.增加操作

实现类EmpDapImpl中:

 @Overridepublic void insert(Emp emp) {mongoTemplate.insert(emp);}

测试类MongoTest中:

@Test//添加public void test() {Emp emp = new Emp();emp.setEname("root");emp.setSal(7000.0);empDao.insert(emp);log.info("添加成功");}

 

启动测试类:

控制台显示添加成功 

Emp表不是自己创建的,是自动创建的。

 2.删除操作

2.1第一种

实现类EmpDapImpl中:

 @Overridepublic void delete(String id) {//  第一种删除(思路),先查在删。,根据主键去删Emp emp=mongoTemplate.findById(id,Emp.class);mongoTemplate.remove( emp);}

测试类MongoTest中:

这id得和你数据库得对应

@Test//第一种主键删除public void test1() {empDao.delete("66f4ca24508a092655f6270d");//这id得和你数据库得对应log.info("删除成功");}

控制台显示删除成功 

 

2.2第二种删除

实现类EmpDapImpl中:

@Overridepublic void delete(Emp emp) {//第二种根据非主键删除,假如根据名字去删Query query = new Query();query.addCriteria(Criteria.where("ename").is(emp.getEname()));mongoTemplate.remove(query, Emp.class);}

 测试类MongoTest中:

@Test//第二种非主键删除public void test2() {Emp emp = new Emp();emp.setEname("第二个root");empDao.delete(emp);log.info("第二次删除成功");}

首先我们得添加一个数据,因为第一个删完了(。。。。。。),然后再执行删除操作。

执行后的结果:

3.修改操作 

实现类EmpDapImpl中:_id,ename,job对应你数据库的列名,这里的_id比较特殊。

@Overridepublic void update(Emp emp) {Query query=new Query();query.addCriteria((Criteria.where("_id").is(emp.getId())));Update update = new Update();update.set("ename", emp.getEname());update.set("job",emp.getJob());mongoTemplate.updateMulti(query, update, Emp.class);}

 测试类MongoTest中:

id是你数据库某条数据的_id

@Test//修改public void test3() {Emp emp = new Emp();emp.setId("66f4d246dca21e696578d79e");emp.setEname("修改操作");emp.setJob("开发");empDao.update(emp);log.info("修改成功");}

 

 启动

启动结果

修改前:

修改后:

4.查询操作 

实现类EmpDapImpl中:

 @Overridepublic Emp findEmp(String id) {return  mongoTemplate.findById(id,Emp.class);}

 测试类MongoTest中:

@Test//查询public void test4() {Emp byId = empDao.findEmp("66f4d246dca21e696578d79e");System.out.println(byId);}

启动测试:

现在表中的数据

 

查出来的结果:

六.我的项目结构 

到这就基本结束了,这里展示我的项目结构供大家参考,大家加油。

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

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

相关文章

交通场景多目标检测系统源码分享

交通场景多目标检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comput…

【机器学习】13-决策树2——决策树生成、剪枝

机器学习13-决策树2——决策树生成、剪枝 数据集划分为子集&#xff0c;构建出一棵树状结构。 文章目录 机器学习13-决策树2——决策树生成、剪枝前言1. 信息增益&#xff08;ID3算法&#xff09;&#xff08;Iterative Dichotomiser 3&#xff09;&#xff1a;选择信息增益最…

Qemu开发ARM篇-7、uboot以及系统网络连接及配置

文章目录 1、uboot及linux版本网络设置1、宿主机虚拟网卡创建2、uboot使用tap0网卡3、启动测试 2、访问外网设置 在上一篇Qemu开发ARM篇-6、emmc/SD卡AB分区镜像制作并通过uboot进行挂载启动中&#xff0c;我们制作了AB分区系统镜像&#xff0c;并成功通过uboot加载kernel以及d…

详解Java中的Collection单列集合(从底层到用法超详细解析和细节分析)

⭕在 Java 中&#xff0c;集合框架是开发过程中最常用的数据结构之一&#xff0c;其中 Collection 接口是整个集合框架的基础。Collection 是处理单列数据的接口&#xff0c;它定义了一些通用的操作&#xff0c;允许对一组对象进行操作。今天我们将深入介绍 Java 中的单列集合 …

docker学习笔记(1.0)

docker命令 下载镜像相关命令 检索&#xff1a;docker search 比如&#xff1a;docker search nginx 是查看有没有nginx镜像 后面的OK表示是不是官方镜像&#xff0c;如果有就是官方镜像&#xff0c;如果没有就是第三方的。 下载&#xff1a;docker pull 比如&#xff1a…

【09】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-Class类基础全解(属性、方法、继承复用、判断)

序言&#xff1a; 本文详细讲解了关于我们在程序设计中所用到的class类的各种参数及语法。 笔者也是跟着B站黑马的课程一步步学习&#xff0c;学习的过程中添加部分自己的想法整理为笔记分享出来&#xff0c;如有代码错误或笔误&#xff0c;欢迎指正。 B站黑马的课程链接&am…

Windows开发工具使用技巧

在 Windows 上进行开发时&#xff0c;有许多工具和技巧可以提升开发效率和用户体验。以下是一些常用的开发工具和技巧&#xff1a; 常用开发工具 1. Visual Studio Code (VS Code) - 插件管理&#xff1a;利用扩展市场&#xff08;Extension Marketplace&#xff09;安装各种…

centos磁盘逻辑卷LVM创建

centos磁盘逻辑卷LVM创建 一、磁盘逻辑卷LVM说明二、centos磁盘使用情况三、LVM安装指南1.LVM工具安装1. yum list lvm2. yum search lvm3. yum search pvcreate4. yum list lvm25. yum install lvm2 2.创建物理卷2.1磁盘情况查看2.2创建物理卷&#xff08;PV&#xff09; 3.创…

【CKA】一、基于角色的访问控制-RBAC

1、基于角色的访问控制-RBAC 1. 考题内容&#xff1a; 2. 答题思路&#xff1a; 这道题就三条命令&#xff0c;建议直接背熟就行。 也可以查看帮助 kubectl create clusterrole -h kubectl create serviceaccount -h kubectl create rolebinding -h 注意&#xff1a; 1、资…

windows 桌面采集音频

头文件&#xff1a; #ifndef __CAPTURE_AUDIO__ #define __CAPTURE_AUDIO__#include <functional> #include <windows.h> #pragma comment(lib, "winmm.lib")class CaptureAudio { public:CaptureAudio();~CaptureAudio();public:bool Init(const std::…

uniapp中uni.request的统一封装 (ts版)

文章目录 前言一、我们为什么要去封装&#xff1f;二、具体实现1.创建一个请求封装文件&#xff1a;2.封装 uni.request&#xff1a;3.如何去使用&#xff1f; 总结 前言 在uniapp中如何去更简洁高效的发送我们的请求&#xff0c;下面就介绍了uni.request()二次封装。 一、我们…

C++ | Leetcode C++题解之第446题等差数列划分II-子序列

题目&#xff1a; 题解&#xff1a; class Solution { public:int numberOfArithmeticSlices(vector<int> &nums) {int ans 0;int n nums.size();vector<unordered_map<long long, int>> f(n);for (int i 0; i < n; i) {for (int j 0; j < i;…

音视频入门基础:FLV专题(7)——Tag header简介

一、引言 从《音视频入门基础&#xff1a;FLV专题&#xff08;3&#xff09;——FLV header简介》中可以知道&#xff0c; 在FLV header之后&#xff0c;FLV文件剩下的部分应由PreviousTagSize和Tag组成。FLV文件 FLV header PreviousTagSize0 Tag1 PreviousTagSize1 Ta…

最新BurpSuite2024.9专业中英文开箱即用版下载

1、工具介绍 本版本更新介绍 此版本对 Burp Intruder 进行了重大改进&#xff0c;包括自定义 Bambda HTTP 匹配和替换规则以及对扫描 SOAP 端点的支持。我们还进行了其他改进和错误修复。 Burp Intruder 的精简布局我们对 Burp Intruder 进行了重大升级。现在&#xff0c;您可…

【Canvas与徽章】金圈蓝底国庆75周年徽章

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>金边黑盾75周年</title><style type"text/css"&g…

sql语句牛客练习

文章目录 1. SQL21 浙江大学用户题目回答情况① 错误② 正确 2. SQL22 统计每个学校的答过题的用户的平均答题数① 错误② 正确 3. SQL23 统计每个学校各难度的用户平均刷题数4. SQL25 查找山东大学或者性别为男生的信息① 错误② 正确 5. SQL26 计算25岁以上和以下的用户数量①…

Linux相关概念和重要知识点(11)(进程调度、Linux内核链表)

1.Linux调度算法 上篇文章我粗略讲过queue[140]的结构&#xff0c;根据哈希表&#xff0c;我们可以将40个不同优先级的进程借助哈希桶链入queue[140]中。调度器会根据queue的下标来进行调度。但这个具体的调度过程是怎样的呢&#xff1f;以及runqueue和queue[140]的关系是什么…

DC00025【含论文】基于协同过滤推荐算法springboot视频推荐管理系统

1、项目功能演示 DC00025【含文档】基于springboot短视频推荐管理系统协同过滤算法视频推荐系统javaweb开发程序设计vue 2、项目功能描述 短视频推荐系统分为用户和系统管理员两个角色 2.1 用户角色 1、用户登录、用户注册 2、视频中心&#xff1a;信息查看、视频收藏、点赞、…

Leecode热题100-84.柱状图中的最大矩形

给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 示例 1: 输入&#xff1a;heights [2,1,5,6,2,3] 输出&#xff1a;10 解释&#xff1a;最大的矩形为图…

Python核心知识:pip使用方法大全

什么是 pip&#xff1f; pip 是 Python 的包管理工具&#xff0c;允许用户安装、升级和管理 Python 的第三方库和依赖。它极大地简化了开发过程&#xff0c;使开发者可以轻松地获取并安装所需的软件包。pip 已成为 Python 项目中最常见的包管理工具&#xff0c;并且自 Python …