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

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

环境

Windows 10 企业版 LTSC 21H2
MongoDB 6.0.21

1 通用命令

1.1 帮助

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

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

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

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

1.2 数据库命令

语法:

bson
1
2
db.runCommand({ 数据库命令 })
db.adminCommand({ 数据库命令 })

注意:

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

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

2 数据库管理

2.1 显示数据库

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

2.2 切换数据库

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

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

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

2.3 删除数据库

语法:

bson
1
db.dropDatabase()

示例:

bson
1
db.dropDatabase();

3 用户管理

3.1 显示用户

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

3.2 创建用户

语法:

bson
1
2
3
4
5
6
7
8
9
10
db.createUser(
{
user: "用户名",
pwd: "密码",
customData: { 用户信息 },
roles: [
{ role: "角色", db: "数据库" }
]
}
)

字段:

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

示例:

bson
1
2
3
4
5
6
7
8
9
10
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 删除用户

语法:

bson
1
db.dropUser("用户名")

示例:

bson
1
db.dropUser("xz");

3.4 更新用户

语法:

bson
1
2
3
4
5
6
7
8
9
10
db.updateUser(
"用户名",
{
pwd: "密码",
customData: { 用户信息 },
roles: [
{ role: "角色", db: "数据库" }
]
}
)

字段:

字段 类型 说明
pwd 字符串 用户的密码。使用明文字符串表示用户密码,或使用passwordPrompt()方法提示输入用户密码。
customData 文档 可选。用户信息。此字段可用于存储管理员希望与此特定用户关联的任何数据。
roles 集合 用户的角色。可以指定一个空数组创建无角色的用户。可以省略数据库,默认为当前数据库。

示例:

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

3.5 查询用户

语法:

bson
1
db.getUser("用户名")

示例:

bson
1
db.getUser("xz");

3.6 验证用户

语法:

bson
1
db.auth("用户名", "密码")

示例:

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

4 集合管理

4.1 显示集合

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

4.2 创建集合

语法:

bson
1
db.createCollection("集合名")

示例:

bson
1
db.createCollection("student");

4.3 删除集合

语法:

bson
1
db.集合名.drop()

示例:

bson
1
db.student.drop();

5 文档管理

5.1 插入文档

5.1.1 插入单个文档

语法:

bson
1
db.集合名.insertOne(document)

字段:

字段 类型 说明
document 文档 要插入的文档。

示例:

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

说明:

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

5.1.2 插入多个文档

语法:

bson
1
2
3
4
db.集合名.insertMany(
documents,
{ ordered: "是否按顺序插入" }
)

字段:

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

示例:

bson
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 查询单个文档

语法:

bson
1
db.集合名.findOne(query)

字段:

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

示例:

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

5.2.2 查询多个文档

语法:

bson
1
db.集合名.find(query)

字段:

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

示例:

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

5.3 删除文档

5.3.1 删除单个文档

语法:

bson
1
db.集合名.deleteOne(filter)

字段:

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

示例:

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

说明:

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

5.3.2 删除多个文档

语法:

bson
1
db.集合名.deleteMany(filter)

字段:

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

示例:

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

5.4 更新文档

5.4.1 更新单个文档

语法:

bson
1
2
3
4
5
db.集合名.updateOne(
filter,
update,
{ upsert: "是否插入文档" }
)

字段:

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

示例:

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

说明:

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

5.4.2 更新多个文档

语法:

bson
1
2
3
4
5
db.集合名.updateMany(
filter,
update,
{ upsert: "是否插入文档" }
)

字段:

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

示例:

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

5.4.3 替换单个文档

语法:

bson
1
2
3
4
5
db.集合名.replaceOne(
filter,
replacement,
{ upsert: "是否插入文档" }
)

字段:

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

示例:

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

说明:

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

评论