数据查询篇(一)"/>
初识Mongdb之数据查询篇(一)
目录
数据查询
介绍
简单查询
无约束查询
查询条数
约束查询
and 查询
or 查询
大于查询(>)
小于查询(<)
小于等于,大于等于查询
不等于查询
高级查询
包含($in)和不包($nin)含查询
not 查询,模糊查询(like)
数组特定查询(all)
Limit(num)
Skip()
sort()排序
设计查询字段和返回字段
简单插入
总结
每文一语
数据查询
介绍
下面的数据集都是模拟的虚拟数据集。如果有需要可以点击此处下载!
直接在Navicat上运行下载文件即可,就会产生数据集,用于查询的练习
MongoDB 查询文档使用 find() 方法。find() 方法以非结构化的方式来显示所有文档。MongoDB 查询数据的语法格式如下:
db.collection.find(query, projection)
collection:集合(类似于MySQL里面的表)
query :可选,使用查询操作符指定查询条件。
projection :可选,指定返回的键。
说实话mongdb的查询语法基本就是这样,但是就只是这些吗?那肯定不是,如果说看了那些复杂的语法,还不如把实际问题简化,把学习问题放在实际中,那么我们下面就开始介绍查询案例,希望对你有所帮助!
简单查询
无约束查询
不加任何约束条件的查询,返回的是全部的信息
//无约束查询
db.students.find();
查询条数
db.students.count();
约束查询
在MySQL里面我们经常用到where来约束我们的查询,用字段返回我们需要的,那么在mongdb我们同样也可以这样,下面我们首先来看看这个对比表:
操作 | 格式 | 范例 | RDBMS中的类似语句 |
---|---|---|---|
等于 | {<key>:<value> } | db.col.find({"by":"王小王"}).pretty() | where by = '王小王' |
小于 | {<key>:{$lt:<value>}} | db.col.find({"likes":{$lt:50}}).pretty() | where likes < 50 |
小于或等于 | {<key>:{$lte:<value>}} | db.col.find({"likes":{$lte:50}}).pretty() | where likes <= 50 |
大于 | {<key>:{$gt:<value>}} | db.col.find({"likes":{$gt:50}}).pretty() | where likes > 50 |
大于或等于 | {<key>:{$gte:<value>}} | db.col.find({"likes":{$gte:50}}).pretty() | where likes >= 50 |
不等于 | {<key>:{$ne:<value>}} | db.col.find({"likes":{$ne:50}}).pretty() |
|
or | {$or:[{key1: value1}, {key2:value2}]} | db.col.find($or:[{c:{$gte:85}},{e:{$gte:90}}]) | where like =123 or like=456 |
and | {key:123,key:456} | db.col.find({"like":"123","like":456}) | where like=123 and 456 |
and 查询
//查询身高是170和身高是160的数据,返回全部信息
db.students.find({height:170,height:160});
or 查询
//查询身高大于175的或者低于160的学生信息
db.students.find({$or: [{height: {$gt: 175}}, {height: {$lt: 160}}]
})
大于查询(>)
//查询身高大于175的学生,性别为1的学生
db.students.find({height:{$gt:175},gender:1})
小于查询(<)
//查询身高小于160的学生,性别为0的学生
db.students.find({height:{$lt:160},gender:0});
小于等于,大于等于查询
这里我就不给出演示了,直接上代码:
//查询大于等于175,小于等于175的学生信息
db.students.find({height:{$gte:175}});db.students.find({height:{$lte:175}});
不等于查询
//查询身高不等于175的学生
db.students.find({height:{$ne:175}});
对于一些基本的操作比较的查询差不多就是这样,唯一需要注意的就是or查询,需要把条件放在列表里面,里面根据你的需要嵌套你的字典约束条件,在mongdb里面如果是字符串可以不用加引号,但是如果是数值型的,加了引号反而会报错!
高级查询
包含($in)和不包($nin)含查询
//查询年级在2015和2017里面的学生信息,避免写多个and
db.students.find({grade: {$in: [2015, 2016, 2017]}
});//查询年级不在2015和2017里面的学生信息,避免写多个and
db.students.find({grade: {$nin: [2015, 2016, 2017]}
});
not 查询,模糊查询(like)
“$not”是元条件句,即可以用在其他条件之上(正则和文档)。$not和$nin的区别是$not可以用在任何地方$nin只能用到集合上
//查询name不包含颢炜的信息,类似于MySQL的模糊查询 like
db.students.find({name: {$not: /颢炜/}
});
//模糊查询名字里面的联想词
db.students.find({
name:/冬睿/
})
数组特定查询(all)
这个要特定与特定的场景之下,比如在字典嵌套字典的前提之下,在一个文档集合里面,水果的类别有:苹果,梨子,香蕉,我们需要获取水果里面同时包含香蕉,苹果的信息,我们就可以使用该语法:
Limit(num)
获取我么需要的前面几行,为了不输出全部的信息行,我们可以使用这个约束条件来展示里面的特定信息
//查询年级不在2015和2017里面的学生信息,避免写多个and,显示前面10个
db.students.find({grade: {$nin: [2015, 2016, 2017]}
}).limit(10);
Skip()
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
//查询年级不在2015和2017里面的学生信息,避免写多个and,从第三个信息开始展示,总共显示前面10个
db.students.find({grade: {$nin: [2015, 2016, 2017]}
}).limit(10).skip(2);
sort()排序
在MongoDB中使用使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列。
//查询年级在2015和2017里面的学生信息,避免写多个and,同时按照他们的班级进行排序,升序
db.students.find({grade: {$in: [2015, 2016, 2017]}
}).sort({grade:-1});
设计查询字段和返回字段
有时候我们在里面进行查询的时候,我们发现条件过于的复杂的时候我们不能够比较有结构的写出,这个时候我们可以使用var 变量来存储我们的查询条件
// 查询身高在160以下,或者身高在170以上的学生信息
db = db.getSiblingDB('cqust');
var 查询条件 = {'grade':2019,'role':'student','major':'大数据', $or:[{'height':{$lt:160}}, {'height':{$gt:175}}] };
var 返回字段 = {};
db.students.find(查询条件, 返回字段);
// 查询大数据2019级1班和2班的学生
db = db.getSiblingDB('cqust');
var 查询条件 = {'grade':2019,'role':'student','major':'大数据', $or:[{'class':1}, {'class':2}] };
var 返回字段 = {};
db.students.find(查询条件, 返回字段);
简单插入
var mydocs = [{"lastname" : "Tan","firstname" : "Guangyu","role" : "teacher","teacher_id" : "2019814","title" : "讲师","courses" : [{ "coursename" : "nosql" },{ "coursename" : "mysql" },{ "coursename" : "python" },{ "coursename" : "linux" },{ "coursename" : "kettle" }]},{"lastname" : "Tan","firstname" : "Yi","role" : "student","student_id" : "2019000001","grade" : "2019","class" : "1","score" : 80},{"lastname" : "Tan","firstname" : "Er","role" : "student","student_id" : "2019000002","grade" : "2019","class" : "1","score" : 70}
];db.collection2.insert(mydocs);
总结
我们在进行查询的时候,可能会联想MySQL的查询结构,以此类推mongdb里面的查询,在mongdb里面查询,我们需要对条件进行包装,也就是字典封装,条件必然是在键值对里面,对于多元操作键对应的值,值里面是字典,操作符前面对应的$符号,后面对应条件的英文单词首字母,比如小于:less than(lt),等于:e,不等于:n,对于$or需要注意里面是数组(列表),然后里面就是键值对的形式并列,总的来说,多看,多练,最后自然也就像MySQL那样游刃有余了!
每文一语
岁月极美,在于它的流逝;春花,秋月,夏日,冬雪。时光就像落在炭火上的水珠,忽的一下就散了......
更多推荐
初识Mongdb之数据查询篇(一)
发布评论