一、聚合查询 aggregate

语法

1
2
3
4
db.集合名称.aggregate([
{管道:{表达式}}
...
])

常用管道

1
2
3
4
5
6
$group 将集合中的文档分组,用于统计结果
$match 过滤数据,只要输出符合条件的文档
$sort 聚合数据进一步排序
$skip 跳过指定文档数
$limit 限制集合数据返回文档数
...

常用表达式

1
2
3
4
5
$sum 总和 $sum:1同count表示统计
$avg 平均
$min 最小值
$max 最大值
...

二、连表查询 lookup

1
2
3
4
5
6
$lookup:{
form:'要连接的表',
localField:'当前model的id',
foreignField:'要连接表的id',
as:'输出的字段名'
}

三、索引

优点

缺点

语法

db.集合名称.createIndex(待创建索引的列[额外选项]) //新增索引
db.集合名称.dropIndex(索引名) // 删除索引

db.user.createIndex({name:1}) // 1 升序,-1 降序

创建唯一索引 unique

分析索引(explain)

分析添加索引的效率

选择规则(如何选择合适的列创建索引)

四、权限机制

使用权限机制,开启验证模式,要求进入数据库必须输入账号密码登录

语法

1
2
3
4
5
6
7
8
9
//创建账号
db.createUser({
"user":"账号",
"pwd":"密码",
"roles":[{
role:"角色",
db:"所属数据库"
}]
})

内置角色列表

角色 权限描述
read 可以读取指定数据库中任何数据。
readWrite 可以读写指定数据库中任何数据,包括创建、重命名、删除集合。
readAnyDatabase 可以读取所有数据库中任何数据(除了数据库 configlocal 之外)。
readWriteAnyDatabase 可以读写所有数据库中任何数据(除了数据库 configlocal 之外)。
userAdminAnyDatabase 可以在指定数据库创建和修改用户(除了数据库 configlocal 之外)。
dbAdminAnyDatabase 可以读取任何数据库以及对数据库进行清理、修改、压缩、获取统计信息、执行检查等操作(除了数据库 configlocal 之外)。
dbAdmin 可以读取指定数据库以及对数据库进行清理、修改、压缩、获取统计信息、执行检查等操作。
userAdmin 可以在指定数据库创建和修改用户。
clusterAdmin 可以对整个集群或数据库系统进行管理操作。
backup 备份 MongoDB 数据最小的权限。
restore 从备份文件中还原恢复 MongoDB 数据(除了 system.profile 集合)的权限。
root 超级账号,超级权限

五、开启数据库访问权限

1、创建管理员用户

1
2
3
4
5
6
7
use admin

db.createUser({
user: "admin", // 用户名
pwd: "admin_password", // 密码
roles: [{ role: "userAdminAnyDatabase", db: "admin" }]
})

2、启用身份验证

1、修改 mongod.conf 文件,启用身份验证

打开MongoDB的配置文件 mongod.conf,添加或修改以下内容以启用身份验证:

1
2
security:
authorization: enabled

2、重启MongoDB服务

应用配置更改后,重启MongoDB服务。

1
mongod --config /path/to/mongod.conf

3、创建数据库用户

1
2
3
4
5
6
7
8
use mydatabase

db.createUser({
user: "dbuser",
pwd: "dbuser_password",
roles: [{ role: "readWrite", db: "mydatabase" }]
})

六、备份还原

导出:mongodump [options]

还原:mongorestore [options]

options:
-u 用户名
-p 密码
-o 指定备份目录
–drop 先删除数据库再导入

注:如果数据库有单独的管理员,需要使用数据库管理员来操作

七、常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// window下停止和启动mongodb服务的命令
net stop MongoDB
net start MongoDB

// 查看已经创建了的用户的情况
db.system.users.find()

// 删除用户
db.dropUser("用户名")

// 修改密码
db.changeUserPassword("用户名","密码")

// 验证添加的用户是否正确
db.auth("用户名","密码")