第一节:MongoDB简介、windows下环境搭建、权限配置、各种指令

一. 简介

1. 说明

 MongoDB是一个基于分布式文件存储 的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

相关对比如下:
  • 数据库(database):最外层的概念,可以理解为逻辑上的名称空间,一个数据库包含多个不同名称的集合。
  • 集合(collection):相当于SQL中的表,一个集合可以存放多个不同的文档。
  • 文档(document):一个文档相当于数据表中的一行,由多个不同的字段组成。
  • 字段(field):文档中的一个属性,等同于列(column)。
  • 索引(index):独立的检索式数据结构,与SQL概念一致。
  • _id:每个文档中都拥有一个唯一的_id字段,相当于SQL中的主键(primary key)。
  • 视图(view):可以看作一种虚拟的(非真实存在的)集合,与SQL中的视图类似。从MongoDB 3.4版本开始提供了视图功能,其通过聚合管道技术实现。
  • 聚合操作($lookup):MongoDB用于实现“类似”表连接(tablejoin)的聚合操作符。

 

2. 技术优势

MongoDB基于灵活的JSON文档模型,非常适合敏捷式的快速开发。与此同时,其与生俱来的高可用、高水平扩展能力使得它在处理海量、高并发的数据应用时颇具优势。
  • JSON 结构和对象模型接近,开发代码量低
  • JSON的动态模型意味着更容易响应新的业务需求
  • 复制集提供99.999%高可用
  • 分片架构支持海量数据和无缝扩容

4. 适用场景

 从目前阿里云 MongoDB 云数据库上的用户看,MongoDB 的应用已经渗透到各个领域:

游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、更新;

物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以MongoDB 内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来;

社交场景,使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能;

物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析;

视频直播,使用 MongoDB 存储用户信息、礼物信息等;

大数据应用,使用云数据库MongoDB作为大数据的云存储系统,随时进行数据提取分析,掌握行业动态。|

 

 

二. 环境准备

1. 安装MongoDB

 (1). 【这里以windows环境下 8.0 为例 】

    下载地址:https://www.mongodb.com/try/download/community

    安装后的目录如下:

      会自动安装成windows服务:

      配置文件:D:\Program Files\MongoDB\Server\8.0\bin\mongod.cfg    (这里保持默认配置即可)

      主要包括三部分:数据存储路径、日志路径、连接地址

# mongod.conf
# for documentation of all options, see: http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
storage:
  dbPath: D:\Program Files\MongoDB\Server\8.0\data

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path:  D:\Program Files\MongoDB\Server\8.0\log\mongod.log

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1

#processManagement:
#security:
#operationProfiling:
#replication:
#sharding:
## Enterprise-Only Options:
#auditLog:

(2) 配置环境变量

  【配置完成后,在任意位置都可以使用 mongod 指令】

 

 

 

 2. 安装客户端 MongoDB-Compass

8.0版本自带compass的安装,不需要额外下载了,安装完成后,桌面上有图标。【这里以版本1.44.4 为例】

 

  默认连接:不使用账号密码

 

3. 安装 mongosh

   mongosh是MongoDB的交互式JavaScript Shell界面,它为系统管理员提供了强大的界面,并为开发人员提供了直接测试数据库查询和操作的方法。

   PS:这里不需要单独安装了,compass中带了命令行了

也可以单独安装,解压即可,然后运行 mongosh.exe 文件,默认没有账号密码,敲击回车,直接连上本地的。

4. 启动MongoDB

(1). 服务的形式启动:

【net start mongodb】

【net stop mongodb】

(2). 指令的形式启动:

 bin目录下中运行cmd 【mongod.exe –config mongod.cfg】    或绝对路径  【mongod.exe –config “D:\Program Files\MongoDB\Server\8.0\bin”】

 推荐使用通用指令---同Linux

   bin目录下中运行cmd 【mongod -f ./mongod.cfg】

 

5. 启动客户端程序 MongoDB-Compass

(1).  双击,桌面图标

(2).  连接即可

    默认没有开启账号密码

   

   

 

三. 权限认证

1.  开启账号密码认证

(默认是没有账号密码认证的,显然不合理)

(1). 使用compass 默认没有密码的情况下登录进去,  选中admin数据库,打开shell指令

 

(2) 运行指令 【  db.createUser({user:"ypf",pwd:"ypf0806",roles:["root"]})  】,创建账号ypf、密码ypf0806,角色为root最高权限,适用于所有数据库。

 

(3) 修改配置文件,开启密码认证 

(注释掉这两行,那么账号密码认证就关闭了)

# mongod.conf
# for documentation of all options, see:http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
storage:
  dbPath: D:\Program Files\MongoDB\Server\8.0\data

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path:  D:\Program Files\MongoDB\Server\8.0\log\mongod.log

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1

#processManagement:

security:
  authorization: enabled

#operationProfiling:
#replication:
#sharding:
## Enterprise-Only Options:
#auditLog:

(4)  关闭服务,然后重启服务

【net stop mongodb】【net start mongodb】

PS:如果未生效,进入服务页面,手动关闭,然后开启。

 

2. 配置允许远程访问

   配置文件中的  bindIp: 127.0.0.1   改为:bindIp: 0.0.0.0

 

3. 给指定数据库配置账号密码

(1). 事先已经创建 ShipDB1、ShipDB2 两个数据库。

(2). 在ShipDB1下,打开shell指令,运行 【   db.createUser({user:"ship1",pwd:"123456",roles:["dbOwner"]})     】

   表示这个账号ship1,仅仅能服务于 ShipDB1数据库。

   但是无法在 compass中登录 ,  却可以在代码中 操作ShipDB1数据库

 

4. 其它授权指令

(1). 权限列表

权限名
描述
read
允许用户读取指定数据库
readWrite
允许用户读写指定数据库
dbAdmin
允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
dbOwner
允许用户在指定数据库中执行任意操作,增、删、改、查等
userAdmin
允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户
clusterAdmin
只能在admin数据库中操作(权限适用所有DB),赋予用户所有分片和复制集相关函数的管理权限
readAnyDatabase
只能在admin数据库中操作(权限适用所有DB),赋予用户所有数据库的读权限
readWriteAnyDatabase
只能在admin数据库中操作(权限适用所有DB),赋予用户所有数据库的读写权限
userAdminAnyDatabase
只能在admin数据库中操作(权限适用所有DB),赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase
只能在admin数据库中操作(权限适用所有DB),赋予用户所有数据库的dbAdmin权限
root
只能在admin数据库中操作(权限适用所有DB)。超级账号,超级权限

 

(2). 新增账号密码指令

A. 适用于所有DB

  权限只能在 userAdmin、cluserAdmin、readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase、root 中选。

# 切换到admin库
use admin
# 创建超级管理员root权限
db.createUser({user:"ypf",pwd:"ypf0806",roles:["root"]})   

B. 适用于指定DB

  权限只能在 read、readWrite、dbAdmin、dbOwner、userAdmin中选

# 切换到指定库,eg:ShipDB1
use ShipDB1
# 创建超级管理员root权限
db.createUser({user:"ship1",pwd:"123456",roles:["dbOwner"]})   

注意:适用于所有DB的账号只能在 admin库下进行查看,删除;  同理,适用于指定DB下的user也只能在对应库下,进行查看和删除。

 

(3). 修改权限指令

db.grantRolesToUser( "ypf" , [ 
    { role: "clusterAdmin", db: "admin" } ,
     { role: "userAdminAnyDatabase", db: "admin"},
     { role: "readWriteAnyDatabase", db: "admin"} 
 ])

 

(4). 删除指令

# 删除指定用户
db.dropUser("ypf")
#删除当前数据库所有用户
 db.dropAllUser()

PS:删除用户只能对当前DB下的用户进行删除

 

(5). 其它指令

命令
说明
show dbs | show databases
显示数据库列表
use 数据库名
切换数据库,如果不存在创建数据库
db.dropDatabase()
删除数据库
show collections | show tables
显示当前数据库的集合列表
db.集合名.stats()
查看集合详情
db.集合名.drop()
删除集合
show users
显示当前数据库的用户列表
show roles
显示当前数据库的角色列表
show profile
显示最近发生的操作
load("xxx.js")
执行一个JavaScript脚本文件
exit | quit
退出当前shell
help
查看mongodb支持哪些命令
db.help()
查询当前数据库支持的方法
db.集合名.help()
显示集合的帮助信息
db.version()
查看数据库版本
 db.system.users.find()
#显示所有用户

 

 

 

 

 

!

  • 作       者 : Yaopengfei(姚鹏飞)
  • 博客地址 : http://www.cnblogs.com/yaopengfei/
  • 声     明1 : 如有错误,欢迎讨论,请勿谩骂^_^。
  • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
 
posted @ 2022-08-25 15:58  Yaopengfei  阅读(251)  评论(2编辑  收藏  举报