Fork me on GitHub

mongo学习笔记(四)

mongoDB索引和管理

学习mongoDB的索引和管理。

今天学习了MongoDB的索引操作还有对数据库的管理。

索引

无论是在关系型数据库还是文档数据库,建立索引都是非常重要的。不过建立索引是要消耗硬盘和内存资源的,所以要根据程序需要进行建立。MongoDB也给我们进行了限制,只允许我们建立64个索引值。

建立索引

建立索引只需要一句话

1
db.集合.ensureIndex({字段:1})  //字段为1表明为其建立索引

查看索引
1
db.集合.getIndexes()
全文索引

有些时候需要在大篇幅的文章中搜索关键词,这时候想搜索关键字是非常不容易的,索引MongoDB为我们提供了全文索引

先在info集合中插入两条数据

1
2
db.info.insert({contentText:"I am a slow walker,but I never walk backwards."})
db.info.insert({contentText:"Your happy passer-by all knows, my distressed there is no place hides."})

接着为其创建全文索引

1
2
db.info.ensureIndex({contentText:"text"})
//使用"text"表示使用全文索引

创建完成之后就可以使用索引进行内容查找了,如

1
db.info.find({$text:{$search:"slow"}})

其中$text则代表使用全文索引进行查找,$search为需要查找的内容。
如果想要同时进行多个关键词的查找,则可以在$search中加入新关键词同时以空格符隔开。如

1
db.info.find({$text:{$search:"slow hides"}})

还可以使用减号“-”来取消某个关键词

1
db.info.find({$text:{$search:"slow -hides"}})

全文搜索中是支持转义符的,比如我们想搜索的是两个词walk backwardshides,这时候需要使用\斜杠来转义。

1
db.info.find({$text:{$search:"\"walk backwards\" hides"}})

管理

用户的创建与修改

安装好MongoDB时,它为我们默认开了一个最高管理权限方便我们管理数据库,我们可以用mongo链接数据库,就是这个原理。但在实际开发中并一般不能使用这个用户,因为大家都知道和最高权限的原因,安全性和可靠性都不适合,所以要对MongoDB的用户进行管理。

因此,MongoDB为我们提供了“建权”操作,即建立权限

首先执行以下mongo命令

1
use admin

我们可以自己创建一个新用户而不是使用mongo。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
db.createUser({
user: 'tobee',
pwd: '123456',
customData: {
name: 'tobee',
age: 18
},
roles: [
{
role: 'readWrite',
db: 'company'
},
'read'
]
})

roles为权限设定。此处除了company数据库的权限单独设置为读写readWrite外,其余对全部数据库设为只读read。
新建完成之后,我们看一下该用户是否创建成功。使用以下命令行

1
db.system.users.find()

接着断开MongoDB服务器,以建权方式重新打开服务器

1
mongod --auth

此时就不能直接使用mongo连接数据库了。而是需要用户名和密码登录。

1
mongo -u tobee -p 123456 127.0.0.1:17027/admin

-u选项为用户名,-p为密码,之后的为电脑IP和MongoDB占用的端口号(17027)和所需进入的数据库(admin)。
此时便可以使用自己的其他用户名与远程mongo服务器进行链接了。
以下代码可以验证用户名与密码是否一致。

1
2
db.auth("tobee","123456")
//如果正确返回1,如果错误返回0。(Error:Authentication failed。)
备份和还原

MongoDB的备份:mongodump。以下都是该命令的参数

1
2
3
4
5
6
7
8
mongodump
--host 127.0.0.1
--port 27017
--out D:/databack/backup
--collection myCollections
--db test
--username username
--password password

--host为IP地址,--port为端口号,--out可将备份保存到D:/databack/backup目录下。

比如现在我们备份所有MongoDB里的库到D盘的databack文件夹下,就可以把命令写成这样

1
mongodump --host 127.0.0.1 --port 27017 --out D:/databack/

MongoDB的恢复:mongostore。以下都是该命令的参数

1
2
3
4
5
6
mongorestore
--host 127.0.0.1
--port 27017
--username username
--password password
<path to the backup>

<path to the backup>为当时保存备份的目录。

当某个已备份的集合不小心删除之后,可以使用还原语句恢复。

1
mongorestore --host 127.0.0.1 --port 27017 D:/databack/

毕竟没有实际项目可以练练手,所以我也只能多看些教程和敲敲基本的代码了。keep learning~