Docker安装MongoDB并使用Navicat连接

MongoDB简介:

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

查看可用的 MongoDB 版本:

访问DokcerHub中的MongoDB镜像库地址:https://hub.docker.com/_/mongo/tags
可以通过 Sort by 查看其他版本的MongoDB,查看最新版本MongoDB镜像(mongo:latest <span class="ne-text">)&#xFF1A;<a href="https://hub.docker.com/_/mongo/tags?page=1&name=latest" rel="noopener">https://hub.docker.com/_/mongo/tags?page=1&name=latest</a></span>

Docker安装MongoDB并使用Navicat连接

此外,我们还可以用 <span class="ne-text">docker search mongo</span>命令来查看可用版本:

拉取最新版本的MongoDB镜像:

docker pull mongo:latest

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

Docker安装MongoDB并使用Navicat连接

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

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

docker images

Docker安装MongoDB并使用Navicat连接

创建并运行一个 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启用权限访问)。

Docker安装MongoDB并使用Navicat连接

Docker安装MongoDB并使用Navicat连接

解决无法正常执行mongo命令问题

进入容器:

docker exec -it  mongo-test mongo

Docker安装MongoDB并使用Navicat连接

异常原因:

OCI runtime exec failed: exec failed: unable to start container process: exec: “mongo”: executable file not found in $PATH: unknown

官网解决方案:

https://github.com/docker-library/mongo/issues/558

mongo5.0以上的版本使用mongo来执行mongodb命令已经不支持了,你需要改用mongosh来替代mongo!

Docker安装MongoDB并使用Navicat连接

进入创建的MongoDB容器

docker exec -it  mongo-test mongosh

Docker安装MongoDB并使用Navicat连接

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

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

Docker安装MongoDB并使用Navicat连接

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

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

Docker安装MongoDB并使用Navicat连接

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的开放端口:

Docker安装MongoDB并使用Navicat连接

Navicat连接mongoDB:

1.连接MongoDB点击这个位置

2、连接参数介绍:

stand alone:独立的

shard cluster:分片集群

replica set:复制集

SRV record:

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

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

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

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

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

Docker安装MongoDB并使用Navicat连接

Docker安装MongoDB并使用Navicat连接

参考文章:

https://blog.csdn.net/zhanghongshuang/article/details/117461225

Original: https://www.cnblogs.com/Can-daydayup/p/16653882.html
Author: 追逐时光者
Title: Docker安装MongoDB并使用Navicat连接



相关阅读

Title: 基于Opencv的车牌识别系统想必大家都会了,那么识别后计费系统会了吗?

概述

车牌识别脚本我相信大家都见过很多,最多的应该就是基于Opencv来实现的,这个小编也是写过几篇,如果有感兴趣的可以关注小编去查看一下。最近听学弟讲,毕业设计是越来越难了。以前毕设只需要实现车牌识别即可,但是现在不行,车牌识别后是不是要计算他什么时候停进来的。

然后是怎么收费的,五块一小时还是三块,三小时怎么计算,相对而言比单纯的识别车牌又增加了一定的难度,那么今天也是实现大部分停车场的一个计费系统原理。可能它不是Python写的,但是肯定是一门编程语言来实现的。所以今天就教大家如果实现后续的计费系统。附完整代码,需要的拉到文末即可。

Docker安装MongoDB并使用Navicat连接

项目结构

Docker安装MongoDB并使用Navicat连接

说明:

  • datefile文件夹:保存车辆信息表的xlsx文件
  • file文件夹:保存图片文件夹。ic_launcher.jpg是窗体的右上角图标文件;income.png是实现收入统计的柱状图(下一篇文章实现);key.txt是使用百度的图片识别AI接口申请的key;test.jpg保存的是摄像头抓取的图片
  • venv文件夹:项目所需要的各种模块,即项目运行环境
  • btn.py文件:按钮模块
  • main.py文件:程序主文件
  • ocrutil.py文件:车牌识别模块
  • timeutil.py文件:时间处理模块

主要代码

# 车位文字
def text1(screen):
    # 剩余车位
    k = Total - carn
    if k < 10:
        # 剩余车位
        sk = '0' + str(k)
    else:
        sk = str(k)
    # 使用系统字体
    xtfont = pygame.font.SysFont('SimHei', 20)
    # 重新开始按钮
    textstart = xtfont.render('共有车位:' + str(Total) + '  剩余车位:' + sk, True, WHITE)
    # 获取文字图像位置
    text_rect = textstart.get_rect()
    # 设置文字图像中心点
    text_rect.centerx = 820
    text_rect.centery = 30
    # 绘制内容
    screen.blit(textstart, text_rect)

# 停车场信息表头
def text2(screen):
    # 使用系统字体
    xtfont = pygame.font.SysFont('SimHei', 15)
    # 重新开始按钮
    textstart = xtfont.render('  车号       时间    ', True, WHITE)
    # 获取文字图像位置
    text_rect = textstart.get_rect()
    # 设置文字图像中心点
    text_rect.centerx = 820
    text_rect.centery = 70
    # 绘制内容
    screen.blit(textstart, text_rect)
    pass

# 停车场车辆信息
def text3(screen):
    # 使用系统字体
    xtfont = pygame.font.SysFont('SimHei', 12)
    # 获取文档表信息
    cars = pi_table[['carnumber', 'date', 'state']].values
    # 页面就绘制10辆车信息
    if len(cars) > 10:
        cars = pd.read_excel(path + '停车场车辆表.xlsx', skiprows=len(cars) - 10, sheet_name='data').values
    # 动态绘制y点变量
    n = 0
    # 循环文档信息
    for car in cars:
        n += 1
        # 车辆车号 车辆进入时间
        textstart = xtfont.render(str(car[0]) + '   ' + str(car[1]), True, WHITE)
        # 获取文字图像位置
        text_rect = textstart.get_rect()
        # 设置文字图像中心点
        text_rect.centerx = 820
        text_rect.centery = 70 + 20 * n
        # 绘制内容
        screen.blit(textstart, text_rect)
    pass

实现效果

Docker安装MongoDB并使用Navicat连接

结语

是不是也没有你们想的那么难,还是比较简单容易上手的吧,如果你会识别这个计费系统对你来讲是很简单的一件事,完整项目代码太多就没有一一发上来了,需要完整项目源代码的 点这里获取或关注下方公众号即可

Original: https://blog.csdn.net/weixin_43881394/article/details/124458155
Author: 爬遍天下无敌手
Title: 基于Opencv的车牌识别系统想必大家都会了,那么识别后计费系统会了吗?

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/363393/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

最近整理资源【免费获取】:   👉 程序员最新必读书单  | 👏 互联网各方向面试题下载 | ✌️计算机核心资源汇总