MongoDB微服务部署

news2024/10/2 4:56:41

一、安装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/mongodb

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


    @Override
    public void insert(Emp emp) {
       
    }

    @Override
    public void delete(String id) {
       

    }

    @Override
    public void delete(Emp emp) {
       
    }

    @Override
    public void update(Emp emp) {
        

    }

    @Override
    public Emp findEmp(String id) {

    }

    @Override
    public 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中:

 @Override
    public 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中:

 @Override
    public 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中:

@Override
    public 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比较特殊。

@Override
    public 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中:

 @Override
    public 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.coloradmin.cn/o/2183776.html

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

相关文章

2024-09-04 深入JavaScript高级语法十五——浏览器原理-V8引擎-js执行原理

目录 1、浏览器的工作原理1.1、认识浏览器内核1.2、浏览器渲染过程 2、JS引擎2.1、认识 JavaScript 引擎2.2、浏览器内核和JS引擎的关系2.3、V8引擎的原理2.4、V8引擎的架构2.5、V8执行的细节 3、全局代码的执行过程3.1、初始化全局对象3.2、执行上下文栈&#xff08;调用栈&am…

World of Warcraft [CLASSIC][80][Grandel] Call to Arms: Victory in Wintergrasp

Wintergrasp 冬拥湖 120 VS 120 Victory in Wintergrasp - Quest - 魔兽世界怀旧服WLK3.35数据库_巫妖王之怒80级魔兽数据库_wlk数据库

逆向-下字符串查找的条件断点

为了跟踪console程序在访问某个文件时失败的问题&#xff0c;在内核中下了断点&#xff0c;但是内核中文件部分调用太频繁了&#xff0c;无法等到自己的文件。所以最好还是根据条件来下断点。 程序如下 想要在FileName是指定文件时停下来&#xff0c;例如FileName是c:\temp\f…

「轻盈」之旅:OOM故障重现与解决

前期准备 本项目均采用 VisualVM 2.1.10 进行dump文件的分析。JDK1.8及之前所在目录的bin目录下有自带的VisualVM&#xff0c;JDK1.8以后需要自行手动安装下载。 下载地址&#xff1a;https://visualvm.github.io/download.html IDEA插件配置&#xff1a;在Plugins里搜索visual…

2-109 基于matlab-GUI的BP神经网络

基于matlab-GUI的BP神经网络&#xff0c;10种不同分布的数据样本&#xff0c;9种不同的激活函数&#xff0c;可更改升级网络结构参数&#xff0c;对比各种方法参数下的训练测试效果&#xff0c;实时显示预测过程。程序已调通&#xff0c;可直接运行。 下载源程序请点链接&…

【简介Sentinel-1】

Sentinel-1是欧洲航天局哥白尼计划&#xff08;GMES&#xff09;中的地球观测卫星&#xff0c;由Sentinel-1A和Sentinel-1B两颗卫星组成。以下是对Sentinel-1的详细介绍&#xff1a; 一、基本信息 卫星名称&#xff1a;Sentinel-1 所属计划&#xff1a;欧洲航天局哥白尼计划…

【CSS】兼容处理

兼容前缀兼容查询 由于不同浏览器对CSS标准的支持程度不同&#xff0c;可能会导致在不同浏览器中出现样式差异。为了解决这个问题&#xff0c;需要采取一些措施来提高CSS的兼容性 兼容前缀 兼容前缀针对的浏览器-webkit-WebKit 内核浏览器&#xff0c;如&#xff1a;Safari 、…

.NET Core 集成 MiniProfiler性能分析工具

前言&#xff1a; 在日常开发中&#xff0c;应用程序的性能是我们需要关注的一个重点问题。当然我们有很多工具来分析程序性能&#xff1a;如&#xff1a;Zipkin等&#xff1b;但这些过于复杂&#xff0c;需要单独搭建。 MiniProfiler就是一款简单&#xff0c;但功能强大的应用…

进击J9:Inception v3算法实战与解析

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、实验目的&#xff1a; 了解并学习InceptionV3相对于InceptionV1改进了哪些地方&#xff08;重点&#xff09;使用Inception v3完成天气识别案例 二、实验环…

Android 12.0 关于定制自适应AdaptiveIconDrawable类型的动态时钟图标的功能实现系列一

1.前言 在12.0的系统rom定制化开发中,在关于定制动态时钟图标中,原系统是不支持动态时钟图标的功能,所以就需要从新 定制动态时钟图标关于自适应AdaptiveIconDrawable类型的样式,就是可以支持当改变系统图标样式变化时,动态时钟 图标的背景图形也跟着改变,所以接下来就来…

OpenFeign微服务部署

一.开启nacos 和redis 1.查看nacos和redis是否启动 docker ps2.查看是否安装nacos和redis docker ps -a3.启动nacos和redis docker start nacos docker start redis-6379 docker ps 二.使用SpringSession共享例子 这里的两个例子在我的一个博客有创建过程&#xff0c…

通信工程学习:什么是LTE长期演进

LTE:长期演进 LTE(Long Term Evolution,长期演进)是由3GPP(The 3rd Generation Partnership Project,第三代合作伙伴计划)组织制定的UMTS(Universal Mobile Telecommunications System,通用移动通信系统)技术标准的长期演进。以下是对LTE的详细解释: 一、定…

音乐制作软件FL Studio 24.1.1.4285 中文完整版新功能介绍及如何安装激活FL Studio 24

FL Studio 24.1.1.4285 中文完整版又被国内网友称之为水果音乐制作软件24&#xff0c;是Image-Line公司成立26周年而发布的一个版本&#xff0c;是目前互联网上最优秀的完整的软件音乐制作环境或数字音频工作站&#xff0c;包含了编排&#xff0c;录制&#xff0c;编辑&#xf…

笔墨歌盛世 丹青绘匠心,艺术赋能“百千万工程”

9月30日上午&#xff0c;乡村有“艺”思——2024 年三乡镇乡村文化艺术周启动仪式暨“崛起的力量”余镇河深中通道主题美术作品展开幕仪式在中山市三乡镇古鹤村成荣美术馆举行。 中山市文联党组成员、专职副主席卢曙光&#xff0c;三乡镇党委委员艾立强&#xff0c;中山市文化馆…

leetcode每日一题day21(24.10.1)——最低票价

看到题目&#xff0c;最低消费又有各种的方案&#xff0c;与结合往期每日一题很就没出动态规划&#xff0c;就感觉这题很像动态规划。 思路:对于第X天&#xff0c;买票有三种方案&#xff0c;即从&#xff0c;X-1天买一天的票&#xff0c;X-7买7天的票&#xff0c;X-30买三十天…

iSTFT 完美重构的条件详解

目录 引言1. 短时傅里叶变换&#xff08;STFT&#xff09;与逆变换&#xff08;iSTFT&#xff09;概述2. 完美重构的条件3. 数学推导4. 实现要点5. 示例代码6. 总结 引言 在数字信号处理领域&#xff0c;短时傅里叶变换&#xff08;Short-Time Fourier Transform&#xff0c;简…

Java Web开发详解:从入门到实践

目录 引言 Java Web开发的优势 Java Web开发核心概念 Servlet和JSP Servlet JSP&#xff08;JavaServer Pages&#xff09; MVC架构 JDBC和数据库访问 JDBC概述 数据库连接示例 常用的Java Web框架 Spring MVC Hibernate MyBatis 对比常用框架 Java Web开发流程…

YOLOv5改进系列(1)——添加CBAM注意力机制

一、如何理解注意力机制 假设你正在阅读一本书&#xff0c;同时有人在你旁边说话。当你听到某些关键字时&#xff0c;比如“你的名字”或者“你感兴趣的话题”&#xff0c;你会自动把注意力从书上转移到他们的谈话上&#xff0c;尽管你并没有完全忽略书本的内容。这就是注意力机…

docker零基础入门教程

注意 本系列文章已升级、转移至我的自建站点中&#xff0c;本章原文为&#xff1a;Docker入门 目录 注意1.前言2.docker安装3.docker基本使用4.打包docker镜像5.docker进阶 1.前言 如果你长期写C/C代码&#xff0c;那你应该很容易发现C/C开源项目存在的一个严重问题&#xff…

Xshell-8下载安装教程

下载地址 https://www.xshell.com/zh/free-for-home-school/ 新建Xshell文件夹 点击安装程序 选择新建Xshell文件夹 默认即可 点击安装 注册 提交后点击邮箱收到的链接 点击确认 安装完成