头歌实践教学平台:大数据存储2023(十九2)
2026/9/2 17:02:36 网站建设 项目流程

十九、MongoDB 文档的高级查询操作

第2关:高级查询(一)


任务描述
本关任务:根据编程要求完成文档查询。

相关知识
为了完成本关任务,你需要掌握:各种查询操作符的用法。
$all 匹配所有
假设有集合 hobbies 内容如下:
_id
name
sex
hobbies
1
小红

唱歌,跳舞,羽毛球
2
小明

唱歌,乒乓球,羽毛球
3
小亮

乒乓球,羽毛球


查询其中所有喜欢“唱歌”和“羽毛球”的人:
1. db.hobbies.find({hobbies:{$all:["唱歌","羽毛球"]})
查询结果如图所示:


图 1
• $all 会查询满足方括号中所有条件的文档,如果只有其中一项满足是不会被查询出来的。


$exists 判断字段是否存在
在集合 hobbies 中更新文档:
1. db.hobbies.save({_id:1,name:"小红",age:18,sex:"女",hobbies:["唱歌","跳舞","羽毛球"]}) #添加小红年龄18
• 查询 hobbies 集合中存在 age 字段的文档,如图 2 所示:

图 2
• hobbies 集合中不存在 age 字段的文档,如图 3 所示:

图 3


$mod 取模运算
在集合 hobbies 中更新文档:
1. db.hobbies.update({_id:2},{$set:{age:20}}) #添加小明年龄20
2.
3. db.hobbies.update({_id:3},{$set:{age:22}}) #添加小亮年龄22
查询 age 取模等于的文档:
1. db.hobbies.find({age:{$mod:[7,4]}})
查询结果如如图所示:

图 4


$in 包含
查询 age =或 age =的文档 :
1. db.hobbies.find({age:{$in:[17,20]}})
查询结果如图所示:

图 5


$nin 不包含
查询 age !=且 age !=的文档:
1. db.hobbies.find({age:{$nin:[17,20]}})
查询结果如图所示:

图 6


$size 数组元素个数
可以查询特定长度的数组,比如 hobbies 这一字段,查询有两个爱好的文档:
1. db.hobbies.find({hobbies:{$size:2}})
查询结果如图所示:

图 7


查询结果排序
查询结果排序语法如下:
1. db.collection.find().sort({_id:1}) #将查询结果按照_id升序排序
2.
3. db.collection.find().sort({_id:-1}) #将查询结果按照_id降序排序

编程要求
现有 person.json 文件内容如下:
_id
name
age
sex
hobbies
1
杨璐
19

唱歌,跳舞
2
李建学
20

唱歌,篮球
……
……
……
……
……
在命令行进行操作:
• 将 /home/example/person.json 文件导入到数据库 mydb2 中的 test 集合中。
在右侧代码行 Begin-End 中编辑:
• 执行查询命令,查找所有喜欢唱歌和跳舞的人的信息,并按照 _id 升序排序;
• 执行查询命令,查找所有喜欢羽毛球和跳舞的人的信息,并按照 _id 升序排序;
• 执行查询命令,查找有个爱好的人的信息,并按照 _id 升序排序;
• 执行查询命令,查找文档中存在 hobbies 字段的人的信息,并按照 _id 升序排序;
• 执行查询命令,查找岁和岁的人的信息,并按照 _id 升序排序;
• 执行查询命令,查找不是岁的人的信息,并按照 _id 升序排序;
• 执行查询命令,查找 age 取模等于的人的信息,并按照 _id 升序排序。
注意:上述操作共有七条命令,每条命令以 ; 号隔开(由于测试需要,请在$ 前加 `(转义符),即使用 \$,平时在命令窗口练习不需要加 `;不要使用双引号改用 单引号)。

测试说明
操作完之后点击评测,我会对你的操作进行测试,如果操作正确,我会输出如 测试集所示的结果。
开始你的任务吧,祝你成功!

## 代码行部分
#********* Begin *********#
echo "
db.test.find({hobbies:{\$all:['唱歌', '跳舞']}}).sort({_id:1});
db.test.find({hobbies:{\$all:['羽毛球', '跳舞']}}).sort({_id:1});
db.test.find({hobbies:{\$size:3}}).sort({_id:1});
db.test.find({hobbies:{\$exists:true}}).sort({_id:1});
db.test.find({age:{\$in:[19,23]}}).sort({_id:1});
db.test.find({age:{\$nin:[20]}}).sort({_id:1});
db.test.find({age:{\$mod:[9,2]}}).sort({_id:1});
"
#********* End *********#

有任何问题都可以随时关注私信!

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询