抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

摘要:本文学习了常用的操作,包括对数据库和用户的管理,对集合的管理,以及对文档的增删改查。

环境

Windows 10 企业版 LTSC 21H2
MongoDB 6.0.21

1 通用命令

1.1 帮助

执行show dbs命令查看数据库。

执行use 数据库命令切换到指定数据库。

执行show collections命令查看当前数据库的集合。

执行show users命令查看当前数据库的用户。

1.2 数据库命令

语法:

sql
1
2
db.runCommand(<command>)
db.adminCommand(<command>)

含义:

名称 类型 说明
command 文档 数据库命令

注意:

  • runCommand针对当前数据库运行命令。
  • adminCommand针对admin数据库运行管理命令。

大部分方法都封装了对应的数据库命令,以方便开发者使用数据库。

2 数据库管理

2.1 显示数据库

使用show dbs命令查看数据库。

2.2 切换数据库

使用use 数据库命令切换到指定数据库。

使用db命令查看当前数据库。

允许使用use 数据库进入不存在的数据库,在插入文档后会自动创建数据库和集合。

2.3 删除数据库

语法:

sql
1
db.dropDatabase()

示例:

sql
1
db.dropDatabase();

3 用户管理

3.1 显示用户

使用show users命令查看当前数据库的用户。

3.2 创建用户

语法:

sql
1
2
3
4
5
6
7
8
db.createUser({
user: <username>,
pwd: <password>,
customData: <userinfo>,
roles: [
{role: <rolename>, db: <dbname>}
]
})

含义:

名称 类型 说明
username 字符串 用户的名称
password 字符串 用户的密码,使用明文字符串表示用户密码,或使用passwordPrompt()方法提示输入用户密码
userinfo 文档 用户信息,可选,此属性可用于存储管理员希望与此特定用户关联的任何数据
roles 数组 用户的角色,可以指定一个空数组创建无角色的用户,默认为当前数据库
rolename 字符串 角色名
dbname 字符串 数据库名

示例:

sql
1
2
3
4
5
6
7
8
db.createUser({
user: "xz",
pwd: "123456",
customData: {name: "校长"},
roles: [
{role: "readWrite", db: "school"}
]
});

用户的角色包括内置角色和自定义角色,内置角色如下:

类型 角色 说明
数据库用户角色 read 允许用户获取指定数据库的读权限
数据库用户角色 readWrite 允许用户获取指定数据库的读写权限
数据库管理角色 dbAdmin 允许用户获取指定数据库的管理权限
数据库管理角色 userAdmin 允许用户获取指定数据库的用户管理权限
数据库管理角色 dbOwner 允许用户对数据库执行任何管理操作,包含readWrite角色、dbAdmin角色、userAdmin角色
集群管理角色,只在admin数据库中可用 clusterAdmin 提供最大的集群管理访问权限,包含clusterManager角色、clusterMonitor角色、hostManager角色,还提供dropDatabase操作
备份和恢复角色,只在admin数据库中可用 backup 提供备份数据所需的最低特权
备份和恢复角色,只在admin数据库中可用 restore 提供数据恢复所需权限
全数据库角色,只在admin数据库中可用,适用于除local和config的数据库 readAnyDatabase 提供所有数据库的读权限
全数据库角色,只在admin数据库中可用,适用于除local和config的数据库 readWriteAnyDatabase 提供所有数据库的读写权限
全数据库角色,只在admin数据库中可用,适用于除local和config的数据库 dbAdminAnyDatabase 提供所有数据库的管理权限
全数据库角色,只在admin数据库中可用,适用于除local和config的数据库 userAdminAnyDatabase 提供所有数据库的用户管理权限
超级用户角色,只在admin数据库中可用,适用于除local和config的数据库 root 提供所有权限

3.3 删除用户

语法:

sql
1
db.dropUser(<username>)

含义:

名称 类型 说明
username 字符串 用户名

示例:

sql
1
db.dropUser("xz");

3.4 更新用户

语法:

sql
1
2
3
4
5
6
7
8
9
10
db.updateUser(
<username>,
{
pwd: <password>,
customData: <userinfo>,
roles: [
{role: <rolename>, db: <dbname>}
]
}
)

含义:

名称 类型 说明
username 字符串 用户名
password 字符串 用户的密码,使用明文字符串表示用户密码,或使用passwordPrompt()方法提示输入用户密码
userinfo 文档 用户信息,可选,此属性可用于存储管理员希望与此特定用户关联的任何数据
roles 数组 用户的角色,可以指定一个空数组创建无角色的用户,默认为当前数据库
rolename 字符串 角色名
dbname 字符串 数据库名

示例:

sql
1
2
3
4
5
6
7
8
9
10
db.updateUser(
"xz",
{
pwd: "123456",
customData: {name: "校长"},
roles: [
{role: "readWrite", db: "school"}
]
}
);

3.5 查询用户

语法:

sql
1
db.getUser(<username>)

含义:

名称 类型 说明
username 字符串 用户名

示例:

sql
1
db.getUser("xz");

3.6 验证用户

语法:

sql
1
db.auth(<username>, <password>)

含义:

名称 类型 说明
username 字符串 用户名
password 字符串 用户密码

示例:

sql
1
db.auth("xz", "123456");

4 集合管理

4.1 显示集合

执行show collections命令查看当前数据库的集合。

4.2 创建集合

语法:

sql
1
db.createCollection(<name>)

含义:

名称 类型 说明
name 字符串 要创建的集合名

示例:

sql
1
db.createCollection("student");

4.3 删除集合

语法:

sql
1
db.集合名.drop()

示例:

sql
1
db.student.drop();

4.4 重命名集合

语法:

sql
1
db.集合名.renameCollection(<name>, <drop>)

含义:

名称 类型 说明
name 字符串 要重命名的新集合名
drop 布尔 新集合已存在,是否删除现有的新集合,默认为false表示不删除

示例:

sql
1
db.student.renameCollection("member");

5 文档管理

5.1 插入文档

5.1.1 插入单个文档

语法:

sql
1
db.集合名.insertOne(<document>)

含义:

名称 类型 说明
document 文档 要插入的文档

示例:

sql
1
db.student.insertOne({name: "张三", sex: "男", age: 16});

说明:

  • 如果插入的文档不包含_id属性,会默认创建_id属性并分配唯一的ObjectId()值。如果插入的文档包含_id属性,会使用传入的属性,要求该属性必须是唯一值,否则会引发异常。
  • 插入后会将结果通过acknowledged返回,使用true表示插入成功,使用false表示插入失败。同时将_id属性通过insertedId返回。

5.1.2 插入多个文档

语法:

sql
1
2
3
4
db.集合名.insertMany(
<documents>,
{ordered: <flag>}
)

含义:

名称 类型 说明
documents 文档 要插入的文档数组
flag 布尔 指定执行有序插入还是无序插入,可选,默认为true表示有序

示例:

sql
1
2
3
4
5
6
7
8
9
db.student.insertMany(
[
{_id: 1, name: "张三", sex: "男", age: 16},
{_id: 2, name: "李四", sex: "女", age: 28},
{_id: 3, name: "王五", sex: "男", age: 32},
{_id: 4, name: "赵六", sex: "女", age: 54}
],
{ordered: false}
);

说明:

  • 如果使用有序插入,当插入某个文档失败时,不会继续插入文档。如果使用无序插入,当插入某个文档失败时,会跳过继续插入其他文档。
  • 每组中的操作次数不得超过数据库的maxWriteBatchSize值,默认为100000个。该值会显示在hello.maxWriteBatchSize属性中。

5.2 查询文档

5.2.1 查询单个文档

语法:

sql
1
db.集合名.findOne(<query>)

含义:

名称 类型 说明
query 文档 要查询的文档,可选,如果为空则查询第一个文档,支持通过查询操作符匹配

示例:

sql
1
db.student.findOne({name: "张三"});

5.2.2 查询多个文档

语法:

sql
1
db.集合名.find(<query>)

含义:

名称 类型 说明
query 文档 要查询的文档,可选,如果为空则查询全部文档,支持通过查询操作符匹配

示例:

sql
1
db.student.find({sex: "男"});

5.3 删除文档

5.3.1 删除单个文档

语法:

sql
1
db.集合名.deleteOne(<filter>)

含义:

名称 类型 说明
filter 文档 要删除的文档,如果为{}则删除第一个文档,支持通过查询操作符匹配

示例:

sql
1
db.student.deleteOne({name: "张三", sex: "男"});

说明:

  • 删除后会将结果通过acknowledged返回,使用true表示插入成功,使用false表示插入失败。同时将删除个数通过deletedCount返回。
  • 如果匹配到多个文档,只会删除第一个文档。

5.3.2 删除多个文档

语法:

sql
1
db.集合名.deleteMany(<filter>)

含义:

名称 类型 说明
filter 文档 要删除的文档,如果为{}则删除全部文档,支持通过查询操作符匹配

示例:

sql
1
db.student.deleteMany({name: "张三", sex: "男"});

5.4 更新文档

5.4.1 更新单个文档

语法:

sql
1
2
3
4
5
db.集合名.updateOne(
<filter>,
<update>,
{upsert: <flag>}
)

含义:

名称 类型 说明
filter 文档 要更新的文档,如果为{}则更新第一个文档,支持通过查询操作符匹配
update 文档或管道 要应用更新的修改,只能使用更新操作符或管道
flag 布尔 指定未匹配时是否插入文档,可选,默认为false表示不插入

示例:

sql
1
2
3
4
db.student.updateOne(
{name: "张三", sex: "男"},
{$set: {sex: "女"}}
);

说明:

  • 更新后会将结果通过acknowledged返回,使用true表示更新成功,使用false表示更新失败。同时将匹配个数通过matchedCount返回,将更新个数通过modifiedCount返回。
  • 如果匹配到多个文档,只会更新第一个文档。

5.4.2 更新多个文档

语法:

sql
1
2
3
4
5
db.集合名.updateMany(
<filter>,
<update>,
{upsert: <flag>}
)

含义:

名称 类型 说明
filter 文档 要更新的文档,如果为{}则更新全部文档,支持通过查询操作符匹配
update 文档或管道 要应用更新的修改,只能使用更新操作符或管道
flag 布尔 指定未匹配时是否插入文档,可选,默认为false表示不插入

示例:

sql
1
2
3
4
db.student.updateMany(
{name: "张三", sex: "男"},
{$set: {name: "赵六"}}
);

5.4.3 替换单个文档

语法:

sql
1
2
3
4
5
db.集合名.replaceOne(
<filter>,
<replace>,
{upsert: <flag>}
)

含义:

名称 类型 说明
filter 文档 要替换的文档,如果为{}则替换第一个文档,支持通过查询操作符匹配
replace 文档 要应用替换的文档,只能使用文档
flag 布尔 指定未匹配时是否插入文档,可选,默认为false表示不插入

示例:

sql
1
2
3
4
db.student.replaceOne(
{name: "张三", sex: "男"},
{name: "赵六"}
);

说明:

  • 替换后会将结果通过acknowledged返回,使用true表示替换成功,使用false表示替换失败。同时将匹配个数通过matchedCount返回,将替换个数通过modifiedCount返回。
  • 如果匹配到多个文档,只会替换第一个文档。

评论