文档中均为 MongoDB Shell 命令(非 SQL 语句),MongoDB 是 NoSQL 数据库,用文档模型存储数据,命令逻辑与 SQL 不同
一个MongoDB数据库,里面存放着如下数据
| name | sex | age | year | major | class | hobbies | note |
|---|---|---|---|---|---|---|---|
| 张远 | 男 | 18 | 2025 | 计算机 | 01 | 唱歌,篮球 | 班长 |
| 邓小玲 | 女 | 20 | 2025 | 计算机 | 02 | 绘画,钢琴,跳舞 | |
| 苏明明 | 男 | 19 | 2025 | 计算机 | 01 | 编程,足球,篮球 | 省级奖学金 |
| 张红 | 女 | 17 | 2024 | 计算机 | 01 | 游泳,阅读 | |
| 张晓峰 | 男 | 19 | 2025 | 人工智能 | 01 | 篮球,唱歌 | |
| 赵菲 | 女 | 18 | 2024 | 人工智能 | 02 | 阅读,电影,爬山 | 学生会主席 |
| 王宁 | 男 | 19 | 2025 | 人工智能 | 01 | 游泳,编程 |
接下来处理任务,完成简单需求
任务一 :创建数据库和集合
1. 查看当前连接中的数据库列表;
实现命令:show dbs
2. 创建一个名为 mydb 的数据库;
实现命令:use mydb
3. 查看数据库 mydb 的信息;
实现命令:db.stats()
4. 以显示方式在 mydb 数据库中创建集合 student;
实现命令:db.createCollection("student")
5. 以隐式方式在 mydb 数据库中创建集合 student_1;
实现命令:db.student_1.insertOne({name: "test"})
6. 查看当前数据库中的集合列表;
实现命令:show collections
7. 删除集合 student_1;
实现命令:db.student_1.drop()
任务二:插入文档
请按下列要求将上表中的数据插入文档 student 中,其中 year、major、class 为 department 键的嵌入文档,hobbies 和 note 为数组类型。
1. 将表中的第一行数据插入到集合中(一次插入一条文档);
实现命令:
db.student.insertOne({
name: "张远",
sex: "男",
age: 18,
department: {
year: 2025,
major: "计算机",
class: "01"
},
hobbies: ["唱歌", "篮球"],
note: ["班长"]
})
2. 任选三条数据插入到集合中(一次性有序插入多条文档);
实现命令:
db.student.insertMany([
{
name: "邓小玲",
sex: "女",
age: 20,
department: {
year: 2025,
major: "计算机",
class: "02"
},
hobbies: ["绘画", "钢琴", "跳舞"],
note: []
},
{
name: "苏明明",
sex: "男",
age: 19,
department: {
year: 2025,
major: "计算机",
class: "01"
},
hobbies: ["编程", "足球", "篮球"],
note: ["省级奖学金"]
},
{
name: "张红",
sex: "女",
age: 17,
department: {
year: 2024,
major: "计算机",
class: "01"
},
hobbies: ["游泳", "阅读"],
note: []
}
])
3. 将剩余数据插入到集合中(一次性无序插入多条文档);
实现命令:
db.student.insertMany([
{
name: "张晓峰",
sex: "男",
age: 19,
department: {
year: 2025,
major: "人工智能",
class: "01"
},
hobbies: ["篮球", "唱歌"],
note: []
},
{
name: "赵菲",
sex: "女",
age: 18,
department: {
year: 2024,
major: "人工智能",
class: "02"
},
hobbies: ["阅读", "电影", "爬山"],
note: ["学生会主席"]
},
{
name: "王宁",
sex: "男",
age: 19,
department: {
year: 2025,
major: "人工智能",
class: "01"
},
hobbies: ["游泳", "编程"],
note: []
}
], { ordered: false })
任务三:查询文档
1. 查询集合 student 中的所有文档;
实现命令:db.student.find()
2. 查询集合 student 中所有学生的姓名和性别;
实现命令:db.student.find({}, { name: 1, sex: 1, _id: 0 })
3. 查询所有男生的信息;
实现命令:db.student.find({ sex: "男" })
4. 查询年龄大于18岁的学生;
实现命令:db.student.find({ age: { $gt: 18 } })
5. 查询年龄小于等于18岁的女生的姓名和年龄;
实现命令:
db.student.find(
{ sex: "女", age: { $lte: 18 } },
{ name: 1, age: 1, _id: 0 }
)
6. 查询“计算机”专业的学生;
实现命令:db.student.find({ "department.major": "计算机" })
7. 查询“人工智能”专业“01”班的学生;
实现命令:
db.student.find({
"department.major": "人工智能",
"department.class": "01"
})
8. 查询“计算机”专业或年龄大于18岁的学生;
实现命令:
db.student.find({
$or: [
{ "department.major": "计算机" },
{ age: { $gt: 18 } }
]
})
9. 查询爱好“篮球”的学生姓名和性别;
实现命令:
db.student.find(
{ hobbies: "篮球" },
{ name: 1, sex: 1, _id: 0 }
)
10. 查询第一个爱好是“编程”的学生姓名和专业;
实现命令:
db.student.find(
{"hobbies.0":"编程"},
{name:1,"department.major":1,_id:0}
)
11. 查询爱好“篮球”和“游泳”的学生姓名;
实现命令:
db.student.find( { hobbies: { $all: ["篮球", "游泳"] } }, { name: 1, _id: 0 } )
12. 查询只有两个爱好的学生;
实现命令:db.student.find({ hobbies: { $size: 2 } })
13. 查询表中所有的专业(不含重复值);
实现命令:db.student.distinct("department.major")
14. 查询 note 字段为 null 的学生;
实现命令:db.student.find({ note: { $size: 0 } })
15. 查询包含 note 字段的文档;
实现命令:db.student.find({ note: { $exists: true } })
16. 查询所有学生,结果按年龄降序排列;
实现命令:db.student.find().sort({ age: -1 })
17. 查询集合中的第一条记录;
实现命令:db.student.findOne()
18. 查询集合中第3条至第5条记录;
实现命令:db.student.find().skip(2).limit(3)
19. 查询年龄最小的学生;
实现命令:db.student.find().sort({ age: 1 }).limit(1)
20. 统计集合中所有“计算机”专业的人数;
实现命令:db.student.countDocuments({ "department.major": "计算机" })
任务四:更新文档
1. 更新单个文档
(1) 将集合中第1个学生的年龄增加 1 岁;
实现命令:
db.student.updateOne({}, { $inc: { age: 1 } }, { sort: { _id: 1 } })
(2) 将“苏明明”的班级改为“02”班;
实现命令:db.student.updateOne({ name: "苏明明" }, { $set: { "department.class": "02" } })
(3) 为所有文档增加字段 credit,并设置初始值为30;
实现命令:db.student.updateMany({}, { $set: { credit: 30 } })
(4) 将 note 字段名改为 mark;
实现命令:db.student.updateOne({}, { $rename: { "note": "mark" } })
(5) 将“王宁”的专业改为“计算机”,并返回更新后的文档;
实现命令:
db.student.findOneAndUpdate({ name: "王宁" }, { $set: { "department.major": "计算机" } }, { returnNewDocument: true })
(6) 给“张红”增加爱好“手工”和“吉他”;
实现命令:
db.student.updateOne({ name: "张红" }, { $push: { hobbies: { $each: ["手工", "吉他"] } } })
(7) 将 hobbies 数组中的值按降序排列,并输出前两个爱好;
实现命令:
db.student.updateOne({}, { $push: { hobbies: { $each: [], $sort: -1, $slice: 2 } } }, { sort: { _id: 1 } })
(8) 在“苏明明”的 note 数组的首位增加“团支书”;
实现命令:
db.student.updateOne({ name: "苏明明" }, { $push: { note: { $each: ["团支书"], $position: 0 } } })
(9) 删除“邓小玲”爱好数组中的最后一个值;
实现命令:
db.student.updateOne({ name: "邓小玲" }, { $pop: { hobbies: 1 } })
(10) 删除“赵菲”爱好字段中的“电影”;
实现命令:
db.student.updateOne({ name: "赵菲" }, { $pull: { hobbies: "电影" } })
2. 更新多个文档
(1) 将所有学生的年龄增加1岁;
实现命令:db.student.updateMany({}, { $inc: { age: 1 } })
(2) 将“计算机”专业学生的 credit 值增加 5 分;
实现命令:db.student.updateMany({ "department.major": "计算机" }, { $inc: { credit: 5 } })
3. 替换文档中的数据
(1) 自拟数据,替换“王宁”的信息;
实现命令:db.student.replaceOne({ name: "王宁" }, { name: "王宁", sex: "男", age: 20, department: { year: 2025, major: "软件工程", class: "03" }, hobbies: ["跑步", "编程", "摄影"], note: ["校编程大赛一等奖"], credit: 35 })
(2) 自拟数据,替换“人工智能”专业年龄最大的学生的信息,并返回替换后的数据;
实现命令:db.student.findOneAndReplace( { "department.major": "人工智能" }, { name: "张晓峰", sex: "男", age: 21, department: { year: 2025, major: "人工智能", class: "01" }, hobbies: ["篮球", "深度学习", "吉他"], note: ["研究生推免资格"], credit: 40 }, { sort: { age: -1 }, returnNewDocument: true })
任务五:删除文档
1. 删除“王宁”的数据;
实现命令:db.student.deleteOne({ name: "王宁" })
2. 删除“人工智能”专业“02”班的所有数据;
实现命令:db.student.deleteMany({ "department.major": "人工智能", "department.class": "02" })
3. 删除集合 student 中的所有数据;
实现命令:db.student.deleteMany({})
非特殊说明,本博所有文章均为博主原创。
共有 0 条评论