服务端学习 - MongoDB入门与应用

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

  1. 配置MongoDB yum源
  2. 通过yum 安装 MongoDB
  3. 启动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文档操作

Documentation - MongoDB CRUD Operations

  • db.collection.insert(document) 插入文档
  • db.collection.update(query,update) 更新文档
  • db.collection.deleteOne(query) 删除单个文档
  • db.collection.deleteMany(query) 删除多个文档
  • db.collection.find(query,projection) 查找文档

文档查询$特殊符号

Documentation - Query and Projection Operators

  • $lt/$lte 小于/小于等于
  • $gt/$gte 大于/大于等于
  • $ne 不等于
  • $or 条件查询or
  • $set update操作时set
  • $unset 删除字段
mongo> db.table.find().limit(10)
mongo> db.table.find().skip(900)

知识技能获取,感谢[网易云课堂 - 微专业 - 前端高级开发工程师]运营团队。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值