十九、MongoDB 文档的高级查询操作
第3关:高级查询(二)
任务描述
本关任务:根据编程要求完成文档查询。
相关知识
为了完成本关任务,你需要掌握:各种查询操作符的用法。
假设数据库有集合 student 如下:
_id name age sex major
1 王晓丽 19 女 计算机
2 张明 21 男 计算机
3 秋雅 20 女 播音主持
4 张欣欣 18 女 表演
$or 条件之间的或查询
$or 表示多个查询条件之间是或的关系,比如查询性别 sex 为 男 或年龄 age 为18的文档信息:
db.student.find({$or:[{sex:"男"},{age:18}]})
查询结果,如图1所示:
图 1
$and 条件之间的且查询
$and表示多个查询条件之间是且的关系,比如查询年龄 age 大于18且小于21(18 < age < 21)的信息:
db.student.find({$and:[{age:{$gt:18}},{age:{$lt:21}}]})
查询结果,如图2所示:
图 2
$not 条件取反查询
$not 用来执行取反操作,比如查询年龄 age 大于等于20岁,然后进行取反(即查询年龄小于20岁的文档):
db.student.find({age:{$not:{$gte:20}}})
查询结果,如图3所示:
图 3
正则表达式匹配查询
查询不符合major=计*开头文档:
db.student.find({major:{$not:/^计.*/}})
查询结果,如图4所示:
图 4
count() 返回结果集总数
比如返回上一步正则查询到的结果集有几条:
db.student.find({major:{$not:/^计.*/}}).count()
查询结果,如图5所示:
图 5
编程要求
现有 person.json 文件内容如下:
_id name age sex hobbies
1 杨璐 19 女 唱歌,跳舞
2 李建学 20 男 唱歌,篮球
…… …… …… …… ……
在右侧命令行进行操作:
将 /home/example/person.json 文件导入到数据库 mydb3 中的 test 集合中。
在右侧代码行 Begin-End 中编辑,如下:
执行查询命令,查找年龄为20岁男生的信息,并按照_id升序排序;
执行查询命令,查找年龄为20岁或者性别为男生的信息,并按照_id升序排序;
执行查询命令,查找name = 韩*开头的人的信息,并按照_id升序排序;
执行查询命令,查找年龄19 =< age < 22的人的信息,并按照_id升序排序;
执行查询命令,查找年龄age < 19或age >21的信息,并按照_id升序排序;
执行查询命令,查找name != 韩*开头的人的信息,并按照_id升序排序;
执行查询命令,查找查找name != 韩*开头的人的个数;
执行查询命令,查找年龄19 =< age < 22的人的个数。
注意:上述操作共有八条命令,每条命令以;号隔开(由于测试需要,请在$前加`(转义符),即使用\$,平时在命令窗口练习不需要加`;不要使用双引号改用 单引号)。
测试说明
操作完之后点击评测,我会对你的操作进行测试,如果操作正确,我会输出如 测试集1所示的结果。
开始你的任务吧,祝你成功!
## 代码行部分
#********* Begin *********#
echo "
db.test.find({\$and:[{age:20}, {sex:'男'}]}).sort({_id:1});
db.test.find({\$or:[{age:20}, {sex:'男'}]}).sort({_id:1});
db.test.find({name:/^韩.*/}).sort({_id:1});
db.test.find({\$and:[{age:{\$gte:19}}, {age:{\$lt:22}}]}).sort({_id:1});
db.test.find({\$or:[{age:{\$lt:19}}, {age:{\$gt:21}}]}).sort({_id:1});
db.test.find({name:{\$not:/^韩.*/}}).sort({_id:1});
db.test.find({name:{\$not:/^韩.*/}}).count();
db.test.find({\$and:[{age:{\$gte:19}}, {age:{\$lt:22}}]}).count();
"
#********* End *********#
有任何问题都可以随时关注私信!