MongoDB 索引 权限管理 备份与恢复

MongoDB 索引和MySQL索引有相同的特性,甚至于所有的索引都有共同的特性:通常能够极大的提高查询的效率

索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构

_id :是一个索引

createIndex()方法

查看集合下的所有索引

db.集合名.getIndexes()

MongoDB使用 createIndex() 方法来创建索引。

单列索引

db.集合名称.createIndex(keys, 1/-1)

查看当前使用的索引信息

db.jobdesc.find({索引名:'查找内容'}).explain()

复合索引

db.colname.createIndex({key1:1,key2:-1,...})

给数组添加索引

db.jobdesc.createIndex({数组对应的键:1})

注意:查找的时候数组中的值的顺序必须一致

使用数组索引

db.colname.find({数组对应的键:['value1','value2','value3']})

索引子文档

首先我们要知道什么是子文档,子文档就是在父文档的键下在创建一个文档称为 子文档。

db.集合名称.createIndex({"父文档的值.子文档值1":1,"父文档的值.子文档值2":1,"a父文档的值.子文档值3":1})

创建全文索引

db.集合名称.ensureIndex({key:"text"})

使用全文索引

db.集合名称.find({$text:{$search:"搜索内容"}})

唯一索引:

对字段设置唯一索引时,可以保证字段都是唯一性

1.假如集合中已经存在多个相同的值,不能创建成功

2.假如成功创建唯一索引,不能重复插入

db.colname.createIndex({field:1},{unique:true})

删除索引

db.集合名称.dropIndex("IndexName")

db.集合名称.dropIndexes()

后台创建索引

db.colname.createIndex({indexname:1},{background:true})

name 给我们创建的索引起名

db.colname.createIndex({field:1},{unique:true,name:'indexname'})

sqarse  稀疏索引

因为MongoDB中集合里面可以存在不同的文档数据,那么我们在创建索引的时候,就会出现,有些文档含有索引键,有些文档没有索引键,我们可以使用 sparse 稀疏索引这个属性,如果存在索引键的文档就会创建索引,不存在索引键的文档就不会创建(索引键)对应的索引

db.集合名称.createIndex({"Key": 1}, {"unique": true, "sparse": true})

TTL日期索引

expirAfrerSeconds: 给文档设置一个过期时间,文档从插入时开始,能存活的时间,到达时间自动删除(延迟1)分钟

插入的时间会与本地(北京)时间有8小时的时差

db.colname.createIndex({field:1,filed:1,filed:1},{expirAfrerSeconds:60})

删除所有索引,(除_id外)

db.colname.dropIndexes()

重建索引

db.colname.reIndex()

db.colname.reIndexes()

为了验证我们使用使用了索引,可以使用 explain 命令

db.集合名称.find({Key:"value"}).explain()

强制索引

db.colname.find({'索引':'值'}).hint({'索引名称'}

查看集合的大小

db.集合名称.totalIndexSize()

MongoDB 索引限制

额外开销 每个索引占据一定的存储空间,在进行插入,更新和删除操作时也需要对索引进行操作。所以,如果你很少对集合进行读取操作,建议不使用索引。

内存(RAM)使用 由于索引是存储在内存(RAM)中,你应该确保该索引的大小不超过内存的限制。 如果索引的大小大于内存的限制,MongoDB会删除一些索引,这将导致性能下降。

查询限制 索引不能被以下的查询使用: 正则表达式及非操作符,如 $nin, $not, 等。 算术运算符,如 $mod, 等。

索引键限制 从2.6版本开始,如果现有的索引字段的值超过索引键的限制,MongoDB中不会创建索引。

插入文档超过索引键限制 如果文档的索引字段值超过了索引键的限制,MongoDB不会将任何文档转换成索引的集合。

最大范围 集合中索引不能超过64个 索引名的长度不能超过128个字符 一个复合索引最多可以有31个字段

权限管理

了更安全的访问mongodb,需要访问者提供用户名和密码,于是需要在mongodb中创建用户

一般只有三种权限

root:只在admin数据库中可用,超级账号,超级权限

Read:允许用户读取指定数据库

readWrite:允许用户读写指定数据库

创建超级管理用户

use admin

db.createUser(

    { 

   user:'admin',

    pwd:'123',

    roles:[{role:'root',db:'admin'}]

    }

)

创建成功后退出mongodb客户端, 然后service mongodb stop, 再开启安全认证,

启用安全认证

进入配置文件并修改sudo vi /etc/mongod.conf

启用身份验证

方式一:新版本 注意:keys and values之间一定要加空格, 否则解析会报错 security:   authorization: enabled

方式二:较低版本 或者修改配置文件将auth=true前面的注释拿掉然后保存并退出

最后: 重新启动mongodb

登录

mongo -u 'ljh' -p 'ljh123' --authenticationDatabase generalUser

创建普通用户同理,只不过给的权限没有这么多

修改普通用户权限或密码

修改用户:可以修改pwd、roles属性

注意这里只有超级管理员才有权限修改普通用户的密码和管理权限

db.updateUser(‘ljh',{pwd:'456'})

同样的MongoDb也有备份恢复这种个命令。

只不过我在进行操作的时候已经创建了用户,已经有了权限,所没有测试没有权限的方法。

无权限

mongodump -h dbhost -d dbname -o dbdirectory

-h: MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017

-d: 需要备份的数据库实例,例如:test

-o: 备份的数据存放位置,例如:c:\data\dump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。

有权限

mongodump -h 127.0.0.1 -d admin -o /home/ln/p1804/04/14

恢复

无权限

mongorestore -h 127.0.0.1:27017 -d 数据库名称 --dir ~/Desktop/数据库备份的路径

有权限

mongodump -u 'lwy' -p '12345' --authenticationDatabase 'admin' -d jobs --dir bak/jobs

你可能感兴趣的:(MongoDB 索引 权限管理 备份与恢复)