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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,542评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,822评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,912评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,449评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,500评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,370评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,193评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,074评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,505评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,722评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,841评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,569评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,168评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,783评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,918评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,962评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,781评论 2 354