一、聚合查询 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 可以读取所有数据库中任何数据(除了数据库 config 和 local 之外)。
readWriteAnyDatabase 可以读写所有数据库中任何数据(除了数据库 config 和 local 之外)。
userAdminAnyDatabase 可以在指定数据库创建和修改用户(除了数据库 config 和 local 之外)。
dbAdminAnyDatabase 可以读取任何数据库以及对数据库进行清理、修改、压缩、获取统计信息、执行检查等操作(除了数据库 config 和 local 之外)。
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("用户名","密码")