摘要:本文主要学习了常用的操作,包括对数据库和用户的管理,对集合的管理,以及对文档的增删改查。
环境
Windows 10 企业版 LTSC 21H2
MongoDB 6.0.21
1 通用命令
1.1 帮助
执行show dbs
命令查看数据库。
执行use 数据库
命令切换到指定数据库。
执行show collections
命令查看当前数据库的集合。
执行show users
命令查看当前数据库的用户。
1.2 数据库命令
语法:
1 | db.runCommand({ 数据库命令 }) |
注意:
- runCommand针对当前数据库运行命令。
- adminCommand针对admin数据库运行管理命令。
大部分方法都封装了对应的数据库命令,以方便开发人员使用数据库。
2 数据库管理
2.1 显示数据库
使用show dbs
命令查看数据库。
2.2 切换数据库
使用use 数据库
命令切换到指定数据库。
使用db
命令查看当前数据库。
允许使用use 数据库
进入不存在的数据库,在插入文档后会自动创建数据库和集合。
2.3 删除数据库
语法:
1 | db.dropDatabase() |
示例:
1 | db.dropDatabase(); |
3 用户管理
3.1 显示用户
使用show users
命令查看当前数据库的用户。
3.2 创建用户
语法:
1 | db.createUser( |
字段:
字段 | 类型 | 说明 |
---|---|---|
user | 字符串 | 用户的名称。 |
pwd | 字符串 | 用户的密码。使用明文字符串表示用户密码,或使用passwordPrompt()方法提示输入用户密码。 |
customData | 文档 | 可选。用户信息。此字段可用于存储管理员希望与此特定用户关联的任何数据。 |
roles | 集合 | 用户的角色。可以指定一个空数组创建无角色的用户。可以省略数据库,默认为当前数据库。 |
示例:
1 | db.createUser( |
用户的角色包括内置角色和自定义角色,内置角色如下:
类型 | 角色 | 说明 |
---|---|---|
数据库用户角色 | 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 删除用户
语法:
1 | db.dropUser("用户名") |
示例:
1 | db.dropUser("xz"); |
3.4 更新用户
语法:
1 | db.updateUser( |
字段:
字段 | 类型 | 说明 |
---|---|---|
pwd | 字符串 | 用户的密码。使用明文字符串表示用户密码,或使用passwordPrompt()方法提示输入用户密码。 |
customData | 文档 | 可选。用户信息。此字段可用于存储管理员希望与此特定用户关联的任何数据。 |
roles | 集合 | 用户的角色。可以指定一个空数组创建无角色的用户。可以省略数据库,默认为当前数据库。 |
示例:
1 | db.updateUser( |
3.5 查询用户
语法:
1 | db.getUser("用户名") |
示例:
1 | db.getUser("xz"); |
3.6 验证用户
语法:
1 | db.auth("用户名", "密码") |
示例:
1 | db.auth("xz", "123456"); |
4 集合管理
4.1 显示集合
执行show collections
命令查看当前数据库的集合。
4.2 创建集合
语法:
1 | db.createCollection("集合名") |
示例:
1 | db.createCollection("student"); |
4.3 删除集合
语法:
1 | db.集合名.drop() |
示例:
1 | db.student.drop(); |
5 文档管理
5.1 插入文档
5.1.1 插入单个文档
语法:
1 | db.集合名.insertOne(document) |
字段:
字段 | 类型 | 说明 |
---|---|---|
document | 文档 | 要插入的文档。 |
示例:
1 | db.student.insertOne({ name: "张三", sex: "男", age: 16 }); |
说明:
- 如果插入的文档不包含
_id
字段,会默认创建_id
字段并分配唯一的ObjectId()
值。如果插入的文档包含_id
字段,会使用传入的字段,要求该字段必须是唯一值,否则会引发异常。 - 插入后会将结果通过
acknowledged
返回,使用true表示插入成功,使用false表示插入失败。同时将_id
字段通过insertedId
返回。
5.1.2 插入多个文档
语法:
1 | db.集合名.insertMany( |
字段:
字段 | 类型 | 说明 |
---|---|---|
documents | 文档 | 要插入的文档数组。 |
ordered | 布尔 | 可选。指定执行有序插入还是无序插入,默认为true,true表示有序,false表示无序。 |
示例:
1 | db.student.insertMany( |
说明:
- 如果使用有序插入,当插入某个文档失败时,不会继续插入文档。如果使用无序插入,当插入某个文档失败时,会跳过继续插入其他文档。
- 每组中的操作次数不得超过数据库的
maxWriteBatchSize
值,默认值为100000个。该值会显示在hello.maxWriteBatchSize
字段中。
5.2 查询文档
5.2.1 查询单个文档
语法:
1 | db.集合名.findOne(query) |
字段:
字段 | 类型 | 说明 |
---|---|---|
query | 文档 | 可选。要查询的文档,如果为空则查询第一个文档,支持通过查询操作符匹配。 |
示例:
1 | db.student.findOne({ name: "张三" }); |
5.2.2 查询多个文档
语法:
1 | db.集合名.find(query) |
字段:
字段 | 类型 | 说明 |
---|---|---|
query | 文档 | 可选。要查询的文档,如果为空则查询全部文档,支持通过查询操作符匹配。 |
示例:
1 | db.student.find({ name: "张三", sex: "男" }); |
5.3 删除文档
5.3.1 删除单个文档
语法:
1 | db.集合名.deleteOne(filter) |
字段:
字段 | 类型 | 说明 |
---|---|---|
filter | 文档 | 要删除的文档,如果为{} 则删除第一个文档,支持通过查询操作符匹配。 |
示例:
1 | db.student.deleteOne({ name: "张三", sex: "男" }); |
说明:
- 删除后会将结果通过
acknowledged
返回,使用true表示插入成功,使用false表示插入失败。同时将删除个数通过deletedCount
返回。 - 如果匹配到多个文档,只会删除第一个文档。
5.3.2 删除多个文档
语法:
1 | db.集合名.deleteMany(filter) |
字段:
字段 | 类型 | 说明 |
---|---|---|
filter | 文档 | 要删除的文档,如果为{} 则删除全部文档,支持通过查询操作符匹配。 |
示例:
1 | db.student.deleteMany({ name: "张三", sex: "男" }); |
5.4 更新文档
5.4.1 更新单个文档
语法:
1 | db.集合名.updateOne( |
字段:
字段 | 类型 | 说明 |
---|---|---|
filter | 文档 | 要更新的文档,如果为{} 则更新第一个文档,支持通过查询操作符匹配。 |
update | 文档或管道 | 要应用更新的修改,只能使用更新操作符或管道。 |
upsert | 布尔 | 可选。指定未匹配时是否插入文档,默认为false,false表示不插入,true表示插入。 |
示例:
1 | db.student.updateOne( |
说明:
- 更新后会将结果通过
acknowledged
返回,使用true表示更新成功,使用false表示更新失败。同时将匹配个数通过matchedCount
返回,将更新个数通过modifiedCount
返回。 - 如果匹配到多个文档,只会更新第一个文档。
5.4.2 更新多个文档
语法:
1 | db.集合名.updateMany( |
字段:
字段 | 类型 | 说明 |
---|---|---|
filter | 文档 | 要更新的文档,如果为{} 则更新全部文档,支持通过查询操作符匹配。 |
update | 文档或管道 | 要应用更新的修改,只能使用更新操作符或管道。 |
upsert | 布尔 | 可选。指定未匹配时是否插入文档,默认为false,false表示不插入,true表示插入。 |
示例:
1 | db.student.updateMany( |
5.4.3 替换单个文档
语法:
1 | db.集合名.replaceOne( |
字段:
字段 | 类型 | 说明 |
---|---|---|
filter | 文档 | 要替换的文档,如果为{} 则替换第一个文档,支持通过查询操作符匹配。 |
replacement | 文档 | 要应用替换的文档,只能使用文档。 |
upsert | 布尔 | 可选。指定未匹配时是否插入文档,默认为false,false表示不插入,true表示插入。 |
示例:
1 | db.student.replaceOne( |
说明:
- 替换后会将结果通过
acknowledged
返回,使用true表示替换成功,使用false表示替换失败。同时将匹配个数通过matchedCount
返回,将替换个数通过modifiedCount
返回。 - 如果匹配到多个文档,只会替换第一个文档。
条