第一节: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. 技术优势
- JSON 结构和对象模型接近,开发代码量低
- JSON的动态模型意味着更容易响应新的业务需求
- 复制集提供99.999%高可用
- 分片架构支持海量数据和无缝扩容
4. 适用场景
游戏场景,使用 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
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. 其它授权指令
权限名
|
描述
|
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 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。