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.mzph.cn/pingmian/55242.shtml

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

相关文章

后台管理系统脚手架

后台管理系统脚手架 介绍 在快速迭代的软件开发世界里&#xff0c;时间就是生产力&#xff0c;效率决定成败。对于构建复杂而庞大的后台系统而言&#xff0c;一个高效、可定制的后台脚手架&#xff08;Backend Scaffold&#xff09;无疑是开发者的得力助手。 脚手架 后台脚…

自动驾驶系列—自动驾驶发展史介绍

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

C语言、Eazy_x——井字棋

#include<graphics.h>char board_data[3][3] { { -,-,-},{ -,-,-},{ -,-,-}, };char current_piece o;//检测指定棋子玩家是否获胜 bool CheckWin(char c) {if (board_data[0][0] c && board_data[0][1] c && board_data[0][2] c)return true;if (…

WPS使用越来越卡顿

UOS统信wps频繁的使用后出现卡顿问题&#xff0c;通过删除或重命名kingsoft文件缓存目录。 文章目录 一、问题描述二、问题原因三、解决方案步骤一步骤二步骤三 一、问题描述 用户在频繁的使用wps处理工作&#xff0c;在使用一段时间后&#xff0c;用户反馈wps打开速度慢&…

c++primier第十二章类和动态内存

本章内容包括&#xff1a; 对类成员使用动态内存分配隐式和显式地复制构造函数隐式和显式地重载赋值操作符在构造函数中使用new所必须完成的工作使用静态类成员 将布局new操作符用于对象使用指向对象的指针实现队列抽象数据类型(ADT) 动态内存和类 复习范例和静态类成员 首…

《动手学深度学习》笔记2.2——神经网络从基础→进阶 (参数管理-每层的权重/偏置)

目录 0. 前言 正文&#xff1a;参数管理 1. 参数访问 1.1 [目标参数] 1.2 [一次性访问所有参数] 1.3 [从嵌套块收集参数] 2. 参数初始化 2.1 [内置初始化] 2.2 [自定义初始化] 2.3 [参数绑定-共享参数] 3. 小结&#xff08;第2节&#xff09; 4. 延后初始化 (原书第…

AR 眼镜之-蓝牙电话-来电铃声与系统音效

目录 &#x1f4c2; 前言 AR 眼镜系统版本 蓝牙电话 来电铃声 系统音效 1. &#x1f531; Android9 原生的来电铃声&#xff0c;走的哪个通道&#xff1f; 2. &#x1f4a0; Android9 原生的来电铃声&#xff0c;使用什么播放&#xff1f; 2.1 来电铃声创建准备 2.2 来…

国庆普及模拟2总结

目录 题目链接&#xff1a; 官方题解&#xff1a; 概述&#xff1a; 总结反思&#xff1a; 题目 T1: 题目分析&#xff1a; 错误代码&#xff1a; 错因&#xff1a; &#xff21;&#xff23;代码&#xff1a; T2&#xff1a; 题目分析&#xff1a; 赛时代码&#xf…

LeetCode[中等] 55.跳跃游戏

给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 思路 贪心算法 可达位置…

CSS中字体图标的使用

引言&#xff1a; 在网页设计当中&#xff0c;会有很多很简洁的图标&#xff0c;比如箭头&#xff0c;照相机&#xff0c;放大镜等 这些大概率都是使用字体图标来完成的&#xff0c;因为字体图标比较简洁高效&#xff0c;不会像图片一样需要向浏览器请求数据。那么字体图标该…

记一次vue路由跳转登陆之前的页面,参数丢失问题

一、背景 vue3.0,项目登陆之前访问某个可访问的页面,当跳转到需要登陆才能访问的页面时,跳转到登陆页面,登陆后再跳转到登陆之前需要登陆才能访问的页面,跳转时发现参数丢失了。 A页面(无需登陆)===> B页面(需要登陆)====> 如果未登陆跳转到C登陆页面 ===>…

什么是文件完整性监控(FIM)

组织经常使用基于文件的系统来组织、存储和管理信息。文件完整性监控&#xff08;FIM&#xff09;是一种用于监控和验证文件和系统完整性的技术&#xff0c;识别用户并提醒用户对文件、文件夹和配置进行未经授权或意外的变更是 FIM 的主要目标&#xff0c;有助于保护关键数据和…

《NoSQL》非关系型数据库MongoDB 学习笔记!

Mongo基础&#xff1a; 使用数据库&#xff1a; 使用use 命令 后面跟着要使用的数据库名字即可&#xff0c; 例如&#xff1a;use cities, 值得注意的是&#xff0c; mongo中不像mysql&#xff0c; 还需要先创建数据库&#xff0c;后访问&#xff0c; mongo中&#xff0c;你无…

数据库管理-第246期 为啥有些老板瞧不上技术(20241002)

数据库管理246期 2024-10-02 数据库管理-第246期 为啥有些老板瞧不上技术&#xff08;202401002&#xff09;1 背景2 割裂3 感触总结 数据库管理-第246期 为啥有些老板瞧不上技术&#xff08;202401002&#xff09; 作者&#xff1a;胖头鱼的鱼缸&#xff08;尹海文&#xff09…

leetcode:380. O(1) 时间插入、删除和获取随机元素

实现RandomizedSet 类&#xff1a; RandomizedSet() 初始化 RandomizedSet 对象bool insert(int val) 当元素 val 不存在时&#xff0c;向集合中插入该项&#xff0c;并返回 true &#xff1b;否则&#xff0c;返回 false 。bool remove(int val) 当元素 val 存在时&#xff0…

数据仓库简介(一)

数据仓库概述 1. 什么是数据仓库&#xff1f; 数据仓库&#xff08;Data Warehouse&#xff0c;简称 DW&#xff09;是由 Bill Inmon 于 1990 年提出的一种用于数据分析和挖掘的系统。它的主要目标是通过分析和挖掘数据&#xff0c;为不同层级的决策提供支持&#xff0c;构成…

计算机毕业设计 基于Python的广东旅游数据分析系统的设计与实现 Python+Django+Vue Python爬虫 附源码 讲解 文档

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

Android AMS介绍

注&#xff1a;本文为作者学习笔记&#xff0c;如有误&#xff0c;请各位大佬指点 系统进程运行环境的初始化 Context是一个抽象类&#xff0c;它可以访问application环境的全局信息和各种资源信息和类 context功能&#xff1a; 对Activity、Service生命周期的管理通过Intent发…

LabVIEW自动生成NI-DAQmx代码

在现代数据采集和控制系统中&#xff0c;LabVIEW被广泛应用于各种工业和科研领域。其中&#xff0c;NI-DAQmx是一个强大的驱动程序&#xff0c;可以帮助用户高效地管理和配置数据采集任务。本文将介绍如何在LabVIEW中通过DAQ Assistant Express VI和任务常量自动生成NI-DAQmx代…

Python编码系列—Python状态模式:轻松管理对象状态的变化

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…