MongoDB从入门到实战之Docker快速安装MongoDB

前言

      在上一篇文章中带领带同学们快速入门MongoDB这个文档型的NoSQL数据库,让大家快速的了解了MongoDB的基本概念。这一章开始我们就开始实战篇教程,为了快速把MongoDB使用起来我将会把MongoDB在Docker容器中安装起来作为开发环境使用。然后我这边MongoDB的可视化工具用的是Navicate。废话不多说,我们先花了几分钟开始的把MongoDB环境搭建起来。

MongoDB从入门到实战的相关教程

MongoDB从入门到实战之MongoDB简介👉

MongoDB从入门到实战之MongoDB快速入门👉

MongoDB从入门到实战之Docker快速安装MongoDB👉

YyFlight.ToDoList项目源码地址

GitHub地址:GitHub - YSGStudyHards/YyFlight.ToDoList: 【.NET8 MongoDB 待办清单系统】.NET8 MongoDB从入门到实战基础教程,该项目后端使用的是.NET8、前端页面使用Blazor、使用MongoDB存储数据,更多相关内容大家可以看目录中的MongoDB从入门到实战的相关教程。该系列教程可作为.NET Core入门项目进行学习,感兴趣的小伙伴可以关注博主和我一起学习共同进步。

查看可用的MongoDB版本

访问DokcerHub中的MongoDB镜像库地址:https://hub.docker.com/_/mongo/tags

可以通过 Sort by 查看其他版本的MongoDB,查看最新版本MongoDB镜像(mongo:latest):https://hub.docker.com/_/mongo/tags?page=1&name=latest

 此外,我们还可以用docker search mongo命令来查看可用版本: 

拉取最新版本的MongoDB镜像

docker pull mongo:latest

注意:tag是可选的,tag表示标签,多为软件的版本,默认是latest版本(最新版)

验证MongoDB镜像是否成功拉取到本地

使用以下命令来查看MongoDB镜像是否成功拉取到本地:

docker images

创建并运行一个MongoDB容器

docker run -itd --name mongo-test -p 27017:27017 mongo --auth

参数说明:

  • -itd:其中,i是交互式操作,t是一个终端,d指的是在后台运行。
  • --name mongo-test:容器名称
  • -p 27017:27017 :映射容器服务的 27017 端口到宿主机的 27017 端口。外部可以直接通过 宿主机 ip:27017 访问到 mongo 的服务。
  • --auth:需要密码才能访问容器服务(注意:安全问题,MongoDB默认是不开启权限验证的,不过设置了这里就相当于修改MongoDB的配置auth=ture启用权限访问)。

进入创建的MongoDB容器

docker exec -it  mongo-test mongosh

MongoDB报错"ongoServerError: not authorized on admin to execute command"

MongoDB默认是不需要用户密码就可以连接的,如果使用命令报错"ongoServerError: not authorized on admin to execute command ",则表示当前登陆用户不具备相应权限。

解决办法:在admin数据库中通过创建一个用户,赋予用户root权限。

# 进入admin数据库
use admin# 创建一个超级用户
db.createUser({user:"root",pwd:"123456",roles:[{role:"root",db:"admin"}]}
);#授权登录
db.auth('root','123456')

MongoDB用户权限管理

MongoDB添加用户命令说明

  • user字段,为新用户的名字。
  • pwd字段,用户的密码。
  • cusomData字段,为任意内容,例如可以为用户全名介绍。
  • roles字段,指定用户的角色,可以用一个空数组给新用户设定空角色。在roles字段,可以指定内置角色和用户定义的角色。
  • 超级用户的role有两种,userAdmin或者userAdminAnyDatabase(比前一种多加了对所有数据库的访问,仅仅是访问而已)。
  • db是指定数据库的名字,admin是管理数据库。
  • 不能用admin数据库中的用户登录其他数据库。注:只能查看当前数据库中的用户,哪怕当前数据库admin数据库,也只能查看admin数据库中创建的用户。

首先切换到admin数据库中

# 进入admin数据库
use admin

创建admin超级管理员用户

指定用户的角色和数据库:
(注意此时添加的用户都只用于admin数据库,而非你存储业务数据的数据库)
(在cmd中敲多行代码时,直接敲回车换行,最后以分号首尾)

db.createUser(  { user: "admin",  customData:{description:"superuser"},pwd: "admin",  roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]  }  
)

创建一个不受访问限制的超级用户

拥有所有权限,不受任何限制

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

创建一个业务数据库管理员用户

只负责某一个或几个数据库的増查改删

db.createUser({user:"user001",pwd:"123456",customData:{name:'jim',email:'jim@qq.com',age:18,},roles:[{role:"readWrite",db:"db001"},{role:"readWrite",db:"db002"},'read'// 对其他数据库有只读权限,对db001、db002是读写权限]
})

MongoDB数据库角色说明

  • 数据库用户角色:read、readWrite;
  • 数据库管理角色:dbAdmin、dbOwner、userAdmin;
  • 集群管理角色:clusterAdmin、clusterManager、4. clusterMonitor、hostManage;
  • 备份恢复角色:backup、restore;
  • 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
  • 超级用户角色:root
  • 内部角色:__system

MongoDB中的role详解

  • Read:允许用户读取指定数据库
  • readWrite:允许用户读写指定数据库
  • dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
  • userAdmin:允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户
  • clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限
  • readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
  • readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
  • userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
  • dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限
  • root:只在admin数据库中可用。超级账号,超级权限

服务器配置27017的开放端口

Navicat连接mongoDB并创建集合和添加数据

1.连接MongoDB点击这个位置

2、连接参数介绍:

stand alone:独立的

shard cluster:分片集群

replica set:复制集

SRV record:

SRV记录是DNS服务器的数据库中支持的一种资源记录的类型,它记录了哪台计算机提供了哪个服务这么一个简单的信息。

SRV 记录:一般是为Microsoft的活动目录设置时的应用。DNS可以独立于活动目录,但是活动目录必须有DNS的帮助才能工作。

为了活动目录能够正常的工作,DNS服务器必须支持服务定位(SRV)资源记录,资源记录把服务名字映射为提供服务的服务器名字。

活动目录客户和域控制器使用SRV资源记录决定域控制器的IP地址。

一般情况下,我们连接只需要连接主库查数据,所以选择独立的这个连接方式就可以,填写好常规参数可以点击测试连接是否正常,即可连接!

3、新建MongoDB数据库(MyMondoDBTest)

 

 

4、新建MongoDB文档(Books)并添加数据

 

 

 

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

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

相关文章

前端工程化之:webpack3-5(css module)

目录 一、css module 1.思路 2.实现原理 3.如何应用样式 4.其他操作 (1)全局类名 (2)如何控制最终的类名 5.其他注意事项 一、css module 通过命名规范来限制类名太过死板,而 css in js 虽然足够灵活&…

ShardingSphere 5.x 系列【6】YAML 配置介绍

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列ShardingSphere 版本 5.4.0 源码地址:https://gitee.com/pearl-organization/study-sharding-sphere-demo 文章目录 1. 前言2. YamlConfiguration3. 常用配置项3.1 JDBC 驱动3.2 数据源3.3 规则…

【Python】Mac 本地部署 stable-diffusion

其实要在本地部署 stable-diffusion 不难,只要有“魔法”一切都水到渠成,如下图: (base) MacBook-Pro python % git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui Cloning into stable-diffusion-webui... remote: Enu…

Mac 下JDK环境变量配置 及 JDK多版本切换

一、推荐官网下载: 二、环境变量配置 1、查看JDK地址,在终端输入以下命令: /usr/libexec/java_home -V 我的路径: /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home /Library/Java/JavaVirtualMachines/zulu-11.j…

鸿蒙开发系列教程(十二)--布局应用:Flex布局

相关属性参数与css3的flex布局参数相似 排列方向:direction: FlexDirection.Row, 换行:wrap: FlexWrap.NoWrap, 水平垂直对齐方式: justifyContent: FlexAlign. SpaceBetween, alignItems: ItemAlign.Center Entry Component struct Flex…

Redis核心技术与实战【学习笔记】 - 21.Redis实现分布式锁

概述 在《20.Redis原子操作》我们提到了应对并发问题时,除了原子操作,还可以通过加锁的方式,来控制并发写操作对共享数据的修改,从而保证数据的正确性。 但是,Redis 属于分布式系统,当有多个客户端需要争…

C++多线程:this_thread 命名空间

std::this_thread 是 C 标准库中提供的一个命名空间,它包含了与当前线程相关的功能。这个命名空间提供了许多与线程操作相关的工具,使得在多线程环境中更容易进行编程。 源码类似于如下: namespace std{namespace this_thread{//...........…

JAVA面试汇总总结更新中ing

本人面试积累面试题 多线程微服务JVMKAFKAMYSQLRedisSpringBoot/Spring 1.面向对象的三个特征 封装,继承,多态,有时候也会加上抽象。 2.多态的好处 允许不同类对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种…

苹果手机如何录屏?这里告诉你答案!

苹果公司的iPhone以其卓越的性能和用户体验受到了全球消费者的喜爱,而录屏功能作为手机的一项重要功能,能够帮助我们记录手机屏幕上的操作,分享游戏技巧、制作教程视频等。本文将为您介绍苹果手机如何录屏,帮助您更好地掌握录屏技…

国内唯一!通义灵码入选全球智能编码助手使用率 TOP 榜单

近日,在国内知名科技媒体 InfoQ 研究中心发布的《中国软件技术发展洞察和趋势预测报告 2024》中提到,随着 AI 和大模型技术的普及,开发者智能编码助手的使用习惯已经养成,其中,开发者使用的智能编码助手产品使用率超过…

C语言:内存函数

创作不易,友友们给个三连吧!! C语言标准库中有这样一些内存函数,让我们一起学习吧!! 一、memcpy函数的使用和模拟实现 void * memcpy ( void * destination, const void * source, size_t num ); 1.1 使…

2.6作业

两个线程实现同步 #include <myhead.h> //定义条件变量 pthread_cond_t cond; //定义互斥锁 pthread_mutex_t mutex; //生产者 void *task1(void *arg) {int num 3;while(num--){sleep(1);printf("做了一顿饭\n");//唤醒等待队列中的所有线程pthread_cond_s…