十九、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 *********#
有任何问题都可以随时关注私信!