索引操作
- 语法:db.集合.ensureIndex({属性:1}),1表示升序, -1表示降序
- 具体操作
<!-- 建立索引 --> db.t255.ensureIndex({name:1}) <!-- 查看执行效率 --> db.t255.find({name:'test10000'}).explain('executionStats')
- 在默认情况下索引字段是可以重复的
- 如果不希望重复, 可以指定索引唯一
- 语法: db.集合.ensureIndex({属性:1},{unique:true})
- 举例: 添加stu集合的name为唯一索引
db.stu.ensureIndex({'name':1},{unique:true})
- 比如: 姓名和年龄都相同才认为是同一个人, 不能重复存储
- 语法: db.集合.ensureIndex({字段1:1,字典2:1})
- 举例: db.stu.ensureIndex({name:1, age:1})
- 注意: 建立联合索引,如果查询的时候没有使用到第一个索引, 联合索引不会生效
- 语法: db.集合.dropIndex({索引字段: 1})
数据库恢复跟备份
数据备份与恢复
1. 备份的语法:
mongodump -h dbhost -d dbname -o dbdirectory -h: 服务器地址, 也可以指定端⼝号 -d: 需要备份的数据库名称 -o: 备份的数据存放位置, 此⽬录中存放着备份出来的数据
mongodump -h 192.168.196.128:27017 -d test1 -o ~/Desktop/test1bak
2. 恢复语法:
mongorestore -h dbhost -d dbname --dir dbdirectory -h: 服务器地址 -d: 需要恢复的数据库实例 --dir: 备份数据所在位置
mongorestore -h 192.168.196.128:27017 -d test2 --dir ~/Desktop/test1bak/test1
3. 导出
用于和其他平台进行交互对接,将数据导出成指定格式文件进行使用,比如数据分析常用的csv文件 用于给非计算机行业的用户查看数据,对于他们来说csv文件(打开之后是电子表格)更方便
导出语法: mongoexport -h dbhost -d dbname -c colname -o filename --type json/csv -f field
- -h: 服务器地址
- -d: 数据库名
- -c: 集合名
- -o: 导出文件名
- --type: 文件类型,默认json格式,可选数据类型json,csv
- -f: 需要导出的字段,导出为json格式的数据时可以不指定导出哪些字段,默认全部,导出成csv文件是必须指定
示例:mongoexport -h 192.168.196.128:27017 -d test2 -c col1 -o test1_col1 [--type csv -f name,age,number]
4. 导入
导出语法: mongoimport -h dbhost -d dbname -c colname --file filename [--headerline --type json/csv -f field]
- -h: 服务器地址
- -d: 数据库名
- -c: 集合名
- --file: 导入文件名
- --type: 文件类型,默认json格式,可选数据类型json,csv
- -f: 需要导入的字段
示例:mongoexport -h 192.168.196.128:27017 -d test2 -c col1 -o test1_col1 --type csv -f name,age,number
mongodb权限管理
Mongodb的权限管理
学习目标
1.了解 mongodb的权限管理
1 为什么要进行权限管理的设置
刚安装完毕的mongodb默认不使用权限认证方式启动,与MySQL不同,mongodb在安装的时候并没有设置权限,然而公网运行系统需要设置权限以保证数据安全,所以我们要学习mongodb的权限管理
2 mongodb的权限管理方案
- MongoDB是没有默认管理员账号,所以要先添加管理员账号,并且mongodb服务器需要在运行的时候开启验证模式
- 用户只能在用户所在数据库登录(创建用户的数据库),包括管理员账号。
- 管理员可以管理所有数据库,但是不能直接管理其他数据库,要先认证后才可以。
3 mongodb超级管理员账号的创建
3.1. 以权限认证的方式启动mongodb数据库
sudo mongod -auth
启动之后在启动信息中会有如下信息,说明mongodb以权限认证的方式启动成功
[initandlisten] options: { security: { authorization: "enabled" } }
3.2. 创建超级用户 使用admin数据库(超级管理员账号必须创建在该数据库上)
use admin
创建超级用户
db.createUser({"user":"python","pwd":"python","roles":["root"]})
创建成功会显示如下信息
Successfully added user: { "user" : "python", "roles" : [ "root" ] }
3.3 退出客户端再次登录验证 此时再使用数据库各命令的时候会报权限错误,需要认证才能执行相应操作
use admindb.auth('python','python')1
python用户是创建在admin数据库上的所以必须来到admin数据库上进行认证,认证成功会返回1,失败返回0
4 创建普通用户
1.选择需要创建用户的数据库
use test1
2.在使用的数据库上创建普通用户
db.createUser("user":"user1", "pwd":"pwd1", roles:["read"])创建普通用户user1,该用户在test1上的权限是只读db.createUser("user":"user1", "pwd":"pwd1", roles:["readWrite"])创建普通用户user1,该用户在test1上的权限是读写
3.在其他数据库上创建普通用户
use admindb.createUser({"user":"python1", "pwd":"python1", roles:[{"role":"read","db":"dbname1"},{"role":"readWrite","db":"dbname2"}]})
在admin上创建python1用户,python1用户的权限有两个,一个再dbname1上的只读,另一个是在dbname2上的读写
5 查看创建的用户
show users{ "_id" : "admin.python", "user" : "python", "db" : "admin", "roles" : [ { "role" : "root", "db" : "admin" } ]}
6 删除用户
db.dropUser('python')
system.version 用户全都保存在admin数据库的system.version集合中,但是查看或者删除的时候在哪创建就在哪个库查看或者删除
现在有两种方式进行用户身份的验证
第一种 (类似 MySql)
客户端连接时,指定用户名,密码,db名称
mongo --port 27017 -u "lyl" -p "123456" --authenticationDatabase "admin"
第二种
客户端连接后,再进行验证
use admin
db.auth("adminUser", "adminPass")
// 输出 1 表示验证成功
|
|