MongoDB简介
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
MongoDB特性
- 高可扩展性
- 没有复杂关ty
- 低成本
- 架构灵活
- 半结构化数据
- …
MongoDB安装及配置
官网https://www.mongodb.com/
CentOS 7 rpm安装包 https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.2/s390x/RPMS/mongodb-org-server-4.2.3-1.el7.s390x.rpm
CentOS 7 下载源码https://fastdl.mongodb.org/src/mongodb-src-r4.2.3.tar.gz
Install MongoDB Community Edition on Red Hat or CentOS文档
安装MongoDB Community Edition
- 配置MongoDB yum源
- 通过yum 安装 MongoDB
- 启动MongoDB
> vim /etc/yum.repos.d/mongodb-org.repo
> cat /etc/yum.repos.d/mongodb-org.repo
[mongodb-org]
namg = MongoDB Repository
baseurl = https://mirrors.aliyun.com/mongodb/yum/redhat/$releasever/mongodb-org/4.2/x86_64/
pgpcheck = 1
enabled = 1
gpgkey = https://www.mongodb.org/static/pgp/server-4.2.asc
> yum search mongodb
> yum install -y mongodb-org
MongoDB的常用配置
配置文件mongod.conf
- 日志配置 systemLog
- 数据存储配置 storage
- 进程管理配置 processManagement
- 网络配置 net
- 安全配置 security
- …
# 编辑配置文件
> vim /etc/mongod.conf
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# Where and how to store data.
storage:
dbPath: /var/lib/mongo
journal:
enabled: true
# engine:
# wiredTiger:
# how the process runs
processManagement:
fork: true # fork and run in background
pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile
timeZoneInfo: /usr/share/zoneinfo
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
#security:
# 开启用户访问控制
# authorization: enabled
#operationProfiling:
#replication:
#sharding:
## Enterprise-Only Options
#auditLog:
#snmp:
MongoDB查询与应用
MongoDB基础概念
文档:数据的基本单元,相当于关系型数据库中的行
- 由键值对组成的有续集
- 不仅区分大小写,还区分数据类型
集合:多个文档组成集合,文档可以是不同的结构,相当于关系型数据库中的表
- 不能以system开头,且不能使用保留字符
- 动态模式可以使一个集合中包含多样化文档对象
数据库:多个集合聚合组成数据库
- 数据库名称区分大小写
- 几个特殊意义的数据库:admin(用户数据)、local(本地数据)、config(配置数据)
MongoDB客户端shell
- 客户端shell可以Ⅹ命令行与MongoDB实例进行交互
- 它是一个功能完备的Javascript解释器,所以又称为Javascript shell,可以运行任意Javascript代码
- 通过shell可以对数据进行基本操作:CURD
# 进入shell模式
> mongo
mongo> exit
> vim run.js
// run.js
var userName = '张三'
var timeStamp = Date.parse(new Date())
var insertData={
loginUser:userName,
loginTime:timeStamp,
}
var db = connect('log')
var msg = db.login.insert(insertData)
print(msg)
# 执行run.js文件
> mongo run.js
MongoDB shell version v4.2.3
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("ffddde89-95b1-40c3-a496-5423784ac2dc") }
MongoDB server version: 4.2.3
connecting to: mongodb://127.0.0.1:27017/log
Implicit session: session { "id" : UUID("cc4a6227-d176-456f-a349-c86ce44188f8") }
MongoDB server version: 4.2.3
WriteResult({ "nInserted" : 1 })
# 验证语句执行成功
> mongo
mongo> use log
switched to db log
mongo> show tables
login
mongo> db.login.find()
{ "_id" : ObjectId("5e757afd007791dcc4d2fa11"), "loginUser" : "张三", "loginTime" : 1584757501000 }
> mongo --host 127.0.0.1 --port 27017
> mongo 127.0.0.1:27017/log
MongoDB连接
# 标准URI连接语法
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
- mongodb:// uri协议,固定格式
- username:password@ 可选,连接数据库用户验证
- host 必须指定至少一个host,如果连接复制集,可指定多个主机地址
- port 可选,默认为27017
- /database 连接数据库名称,若不指定默认打开test数据库
- ?options 连接选项
> mongo "mongodb://127.0.0.1:27017/log"
MongoDB用户管理
MongoDB数据库默认是没有用户名及密码的,即无权限访问限制。为了方便数据库的管理和安全,需创建数据库用户
权限 | 说明 |
---|---|
read | 允许用户读取指定数据库 |
readWrite | 允许用户读写指定数据库 |
dbAdmin | 允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile |
userAdmin | 允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户 |
clusterAdmin | 只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限 |
readAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读权限 |
readWriteAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读写权限 |
userAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 |
dbAdminAnyDatabase | 只在admin数据库中可用,赋予所有数据库的dbAdmin权限 |
root | 只在admin数据库中可用。超级账号,超级权限 |
# 创建root用户
> mongo
mongo> use admin
switched to db admin
mongo> db.createUser({user:'root',pwd:'root',roles:[{role:'root',db:'admin'}]})
Successfully added user: {
"user" : "root",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
# 开启访问限制 mongod.conf
> vim /etc/mongod.conf
security:
authorization: enabled
# 利用root权限进入mongo shell
> mongo "mongodb://root:root@127.0.0.1:27017"
# 只为log数据库添加read用户
root@mongo> db.createUser({user:'log',pwd:'log',roles:[{role:'read',db:'log'}]})
Successfully added user: {
"user" : "log",
"roles" : [
{
"role" : "read",
"db" : "log"
}
]
}
# 利用log权限进入mongo shell
> mongo "mongodb://log:log@127.0.0.1:27017/log"
log@mongo> show tables
login
# log权限insert报错
log@mongo> db.login.insert({loginUser:'HAHAHA'})
WriteCommandError({
"ok" : 0,
"errmsg" : "not authorized on log to execute command { insert: \"login\", ordered: true, lsid: { id: UUID(\"d617c38e-e713-462a-a492-9898a7de6809\") }, $db: \"log\" }",
"code" : 13,
"codeName" : "Unauthorized"
})
MongoDB数据库、集合操作
- use database 切换数据库,如果不存在则创建
- show dbs 查看所有数据库
- db 查看当前数据库
- db.dropDatabase() 删除当前数据库
- db.createCollection(‘collection’) 创建集合
- db.collection.renameCollection(‘x’) 重命名集合
- …
MongoDB文档操作
- db.collection.insert(document) 插入文档
- db.collection.update(query,update) 更新文档
- db.collection.deleteOne(query) 删除单个文档
- db.collection.deleteMany(query) 删除多个文档
- db.collection.find(query,projection) 查找文档
- …
文档查询$特殊符号
- $lt/$lte 小于/小于等于
- $gt/$gte 大于/大于等于
- $ne 不等于
- $or 条件查询or
- $set update操作时set
- $unset 删除字段
- …
mongo> db.table.find().limit(10)
mongo> db.table.find().skip(900)
知识技能获取,感谢[网易云课堂 - 微专业 - 前端高级开发工程师]运营团队。