1.掌握在 MongoDB中查询文档操作
2.掌握查找单个文档、多个文档、使用查询运算符根据字段值查找文档,根据子文档查找文档的方法
MongoDB 支持多种复杂的查询方式,能实现大多数 T-SQL 功能,远不是 Key-Value 之类的 NoSQL DB 所能比拟的。
Conditional Operator : $lt <, $lte <=, $gt >, $gte >=
Conditional Operator : $ne //不等于
Conditional Operator : $in //属于
Conditional Operator : $nin //不属于
Conditional Operator : $mod //取模运算
Conditional Operator : $all //全部属于
Conditional Operator : $size //数量
Conditional Operator : $exists //字段存在
Conditional Operator : $or // 或
Regular Expressions //正则表达式
Value in an Array // 数组中的值
Conditional Operator : $elemMatch //要素符合
Meta operator: $not //不是
Conditional Operators : $slice //切片
Javascript Expressions and $where //
sort() //排序
limit() //限制取数据条数
skip() //跳过一定数值开始取
count() // 数量
group() //分组
2.1切换到 xscj 数据库,Shell 端执行以下脚本:实现在 xscj 数据库中,添加 persons 集合,并增加11条学生信息。
2.2查询persons集合中的所有文档信息
2.3查询persons集合中的所有文档信息(规整查找结果的格式)——节选一部分
格式为:db.[documentName].find({条件},{键指定})
3.1查询出所有学生的name、age和country信息
3.2查询出年龄在 25 到 27 岁之间的学生姓名。
3.3查询出所有不是韩国籍的学生的数学成绩,结果显示姓名和数学成绩。
4.1查询国籍是中国或美国的学生信息
4.2查询国籍不是中国或美国的学生信息
4.3查询出满足数组中指定条件的文档
步骤一:在当前数据库中添加数据到 scores 集合中{_id: 1, results: [82,85,88] },{ _id: 2, results: [75,88,89]}
步骤二:查询 89<=results<95 的文档
查询语文成绩大于 85 或者英语大于 90 的学生信息,结果显示学生姓名,语文成绩和英语成绩。
6.2查询出sex等于null的学生
6.3查询集合中包含sex键的文档
6.4查询集合中不包含sex键的文档
正则表达式对象:{
$regex 为模糊查询的字符串提供正则表达式功能。
7.1查询出名字中存在”li”的学生的信息
7.2分析以下查询实现的操作,在当前数据库 xs 集合中录入实例数据检验其功能。
`> db.xs.find({name:{$in:[/^joe/i,/^jack/}})
`> db.xs.find({name:{$regex:/^zh/i, $nin:["zhang"]}})
`> db.xs.find({email:{$regex:/@qq./,$options:"i"}})
```> db.xs.find({name:{$regex:/^zh/}})`
`> db.xs.find({name:{$regex:/c/}})
$not 可以用到任何地方进行取反操作。
查询出名字中不存在”li”的学生的信息。
n o t 和 not 和 not和nin 的区别是 n o t 可以用在任何地方,而 not 可以用在任何地方,而 not可以用在任何地方,而nin 用到集合上。
9.1查询喜欢看MONGODB和JS的学生
9.2 查询第二本书是 JAVA 的学习信息
查询出喜欢的书籍数量是 4 本的学生
11.2改变书籍的更新方式,每次增加书籍的时候 size 增加 1
11.3利用$gt 查询: 喜欢的书籍数量大于4 本的学生
{ _id:1,
members:[{name:“BuleRiver1”,age:27,gender:“M”},
{name:“BuleRiver2”, age:23, gender:“F”},
{name:“BuleRiver3”, age:21, gender:“M”}]
}
查看数据是否正确存储到数据库?
查询是否存在 name 为"BuleRiver1"并且 age 为 27 的成员。使用多种方式尝试查询:(分 析哪种查询可以得到正确结果)
> db.persons1.find({members:{name:“BuleRiver1”}}) //数组元素中的键值一部分
> db.persons1.find({members:{age:27,name:“BuleRiver1”,gender:“M”}})
//把键值颠倒
> db.persons1.find({members:{name:“BuleRiver1”,age:27,gender:“M”}})
//完全匹配数组中的键值
> db.persons1.find({“members.name”:“BuleRiver1”})
> db.persons1.find({“members.name”:“BuleRiver1”,“members.age”:27})
//数组第 1 个元素的键值完全一致
> db.persons1.find({“members.name”:“BuleRiver1”,“members.age”:23})
//数组第 1、2 个元素的部分键值的组合
使用$elemMatch 操作符查询
> db.persons1.find({members:{$elemMatch:{name:“BuleRiver1”,age:27}}})
//$elemMatch+同一个元素中的键值组合
> db.persons1.find({members:{$elemMatch:{name:“BuleRiver1”,age:23}}})
//$elemMatch+不同元素中的键值组合
14.1查询出Jim书架中第2~4本书
14.2查询出最后一本书,注意查询结果同时显示姓名和图书
14.3$slice 值设置为 2 或-2,分析查询结果
为 zhangsan 添加学习简历文档 zhangsanschoool.json。
文档内容:
15.1查询出在 school1 上过学的且成绩为“A”学生
15.2查询出在 school1 上过学的且成绩为“B”学生
15.3查询年龄大于 22 岁,喜欢看 C++书,在 school1 学校上过学的学生信息
db.persons.find(
{"school.school":“school1",“books":{$in:[“C++”],”age”:{$gt:22}},{_id:0,name:1}})
16.1分页 前几条数据limit()
查询persons中的前5条数据
16.2前跨度数据——skip()
查询persons中的前6~8共三条数据,即前面5条省略跳过
16.3排序——sort()
查询 persons 集合中的前三行数据,只显示姓名和年龄,根据 name 升序排序,-1 为倒序
查询学生集合中的所有文档
> var p = db.persons.find(); //得到游标
> while(p.hasNext()){ //遍历游标
> obj = p.next(); //指向下一条记录
> print(obj); //输出
>}
查询美国国籍的人数
查询 persons 集合中一共有多少个国家,分别是什么
查询在“school1”学校上过学的学生
注意:通过”.”连接集合 baseinf 和字段,并用双引号实现指定嵌套文档的查询
查询在“school1”学校上过学且成绩为”A”的学生,查询结果只显示学生姓名