MongoDB
1.简介
MongoDB是一个基于分布式文件存储 [1] 的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
MongDB会自动的将域(字段)设置为主键(primary key),MongDB也可以添加索引,但是MongoDB不支持join连接,但是支持嵌入文档
2.MongDB支持的数据类型
String 字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。
Integer 整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。
Boolean 布尔值。用于存储布尔值(真/假)。
Double 双精度浮点值。用于存储浮点值。
Min/Max keys 将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。
Array 用于将数组或列表或多个值存储为一个键。
Timestamp 时间戳。记录文档修改或添加的具体时间。
Object 用于内嵌文档。
Null 用于创建空值。
Symbol 符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。
Date 日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。
Object ID 对象 ID。用于创建文档的 ID。 (每个文档都有)
Binary Data 二进制数据。用于存储二进制数据。
Code 代码类型。用于在文档中存储 JavaScript 代码。
Regular expression 正则表达式类型,用于存储正则表达式
下载安装mongodb
- 将mongodb上传至虚拟机的根目录中
- 解压mongodb:tar -zxf mongodb-shell-linux-x86_64-amazon-5.0.3.tgz
- 将解压过后的mongodb复制到/usr/local目录下:cp mongodb-linux-x86_64-amazon-5.0.3 /usr/local/mongodb -rf
mongodb的data目录的创建和使用
mongodb的数据存储在data目录的db目录下,这个目录子啊安装过程中不会自动创建,此目录可以创建在任意位置上
- 进入/usr/local/mongodb创建data/db:mkdir -p data/db
mongodb的启动和关闭
mongodb的前置启动
1.所谓的前置启动就是mongodb启动的时候会占用当前窗口
2. 在mongodb的bin目录下的执行,执行时需要加–dbpath是因为启动时如果不指定会默认在根目录寻找mongodb:./mongod --dbpath /usr/local/mongodb/data/db
4. 可以查看此时监听的是:27017端口
5. 开启一个新的窗口,在新的窗口输入:ps aux|grep mongodb可以查看mongdb的进程
后置启动
1.所谓的后置启动就是以守护进程的方式来启动,在启动的时候需要添加–fork配合–logpath来指定日志输出的文件夹,此文件夹可以在任意位置
2. 在/usr/local/mongodb下创建log文件夹:mkdir log
3. 在该目录下创建mongodb.log文件(此文件名可以随意定义):touch mongodb.log
4. 回到bin目录下执行;./mongod --dbpath /usr/local/mongodb/data/db/ --logpath /usr/local/mongodb/log/mongodb.log --fork
通过配置文件的方式来启动mongodb
利用配置文件的key-value的结构来配置启动的参数,配置文件可以在任意的文件夹中,配置文件的扩展名应该为.conf
- 在mongodb目录下创建一个etc目录,在该目录中创建一个mongodb.conf的配置文件:mkdir etc,touch mongodb.conf
- 在配置文件中配置
dbpath=/usr/local/mongodb/data/db
logpath=/usr/local/mongodb/log/mongodb.log
port=27017
bind_ip=0.0.0.0
fork=true
- 关闭已经开启的mongodb:./mongod --shutdown --dbpath /usr/local/mongodb/data/db/
- 在bin目录下执行: ./mongod --config /usr/local/mongodb/etc/mongodb.conf
将mongodb的bin目录配置到环境变量中,使得可以在任意目录下都能启动mongodb
- 打开etc/profile:vim /etc/profile
- 配置环境变量:#设定mongodb的环境变量
export PATH=/usr/local/mongodb/bin:$PATH - 重新加载资源:. /etc/profile
- 输入mongd --help查看配置是否生效
关闭mongodb
- 进入/usr/local/mongodb/bin目录
- 执行:./mongo进入客户端
- 进入admin库:use admin
- 执行关闭库函数:db.shutdownServer()
使用./mongod --shutdown --dbpath 的方式关闭mongodb
- ./mongod --shutdown --dbpath [mongodb数据库的全路径]
mongodb的用户与权限管理
- 用户权限列表
创建一个数据库管理用户(具备管理普通用户的管理员用户:在admin库中赋予userAdminAnyDatabase)
- 打开mongodb的客户端:./mongo
- 切换至admin库中:use admin
- 查看admin中的用户: db.system.users.find()目前没有用户所以不会没有显示
db.createUser函数
创建管理员用户
- 在admin库中输入:db.createUser({user:“mubaidbm”,pwd:“mubaidbmpwd”,roles:[{role:“userAdminAnyDatabase”,db:“admin”}]})
- 在管理员账户创建用户完毕后需要重启mongobd:db.shutdownServer()
使用权限的方式启动MongoDB
在默认情况下mongodb是不开启权限验证的,如果添加了用户就需要开启用户认证机制
- 修改/usr/local/mongodb/etc/mongodb.conf
dbpath=/usr/local/mongodb/data/db
logpath=/usr/local/mongodb/log/mongodb.log
port=27017
bind_ip=0.0.0.0
fork=true
auth=true
- 启动mongodb
- 打开客户端输入:use admin
- 输入:db.system.users.find()会报错,因为数据库开启了权限的校验
- 输入:db.auth(‘mubaidbm’,‘mubaidbmpwd’)返回1则校验成功,返回0则为校验失败
- 登录成功后便可以查询用户了:db.system.users.find()
创建普通用户
管理员创建普通用户,指定操作某个数据库(在那个数据库下创建的该用户就要在那个数据库中认证)
- 创建wcg数据库,给该数据库添加一个用户,用户名为mm1,密码为mm1
pwd - 创建wcg(在mongodb数据库中切换数据库如果数据库不存在则会自动创建一个数据库
- 创建普通用户:db.createUser({user:“mm1”,pwd:“mm1pwd”,roles:[{role:“readWrite”,db:“wcg”}]})
使用普通用户
- 打开一个新的客户端
- 使用wcg这个数据库
- 打开客户端
- 登录普通用户,如果不登录则无法对数据库就行新增
- 新增数据:db.wcg.insert({id:“1000”})
- 查看数据库的数据:db.wcg.find()
更新用户角色
如果我们需要对已经存在的用户的角色做修改,可以使用 db.updateUser()函数来更新角色,使用该函数需要当前用户具有userAdminAnyDatabase或者更高的权限
- 更新角色的语法:db.updateUser(“用户名”,{“role”:“角色名称”},{“更新项2”:“更新内容”}}
- 为mubaidbm的userAdminAnyDatabase用户管理角色(用户管理角色,可以为自己也可以为别人的角色更新)更改为dbAdminAnyDatabase数据库管理角色:db.updateUser(“mubaidbm”,{roles:[{“role”:“userAdminAnyDatabase”,“db”:“admin”},{“role”:“dbAdminAnyDatabase”,“db”:“admin”}]})
更新用户密码
- 使用db.updateUser()函数更新密码:db.updateUser(‘mubaidbm’,{“pwd”:“mubaidbm123456”})
- 使用db.changeUserpassword()函数更新密码:db.changeUserPassword(‘mubaidbm’,“mubaidbmpwd”)
- 退出客户端,使用新密码登录
删除用户
通过db.dropUser()函数删除指定用户,需要切换到该用户所指定的数据库中才能删除,需要具有userAdminAnyDatebase
- 删除mm1用户
- 切换到wcg数据库
- 删除mm1用户:db.dropUser(“mm1”)
mongodb的数据库操作
- 创建wcgtest数据库:usewcgtest
- 查看所有的数据库:使用show dbs命令查看当前mongodb中所有的数据库(如果开启了权限认证,需要先登录才能查看,且只能查看操作过的数据库,普通用户只能查看他能操作的数据库)
- 删除数据库(切换到需要删除的数据库中)执行:db.dropDatabase()