今天详细讲 增删改查 中的查询。
提前准备好了一个数据文件,大家可以自己写一个:
一、查询全部数据:db.persons.find()
把它复制到命令行中会自动添加到数据中,使用db.persons.find()之后所有数据都展示出来了。
二、查询指定的键对应的信息:db.persons.find({ 条件 },{ 要查询的键 })
如果我们只想要里面的price相关的数据,不要_id和img的数据,就用到find里面的参数,命令:db.persons.find({},{_id:0,price:1}) 其中第一个参数是个空对象,表示从全部的数据中查询。我们可以看到这里没有写img1=0,但是也没有显示出来,如果_id=0这个不写的话是会显示出_id的信息的,这是个小注意点。
三、按条件查询:
1、对应的条件语句:$lt ----- < ; $lte ----- <= ; $gt ----- > ; $gte ----- >= ; $ne ----- !=
举个例子:要查询价格加个在[20,30]之间的数据:db.persons.find({price:{$gte:20,$lte:30}},{_id:0,price:1}) ,同样的道理,这里是在第一个参数限定的范围内找第二个参数中的信息。
再来一个:查询image1不是img/IMG_6105_03.png 的信息。
2、$in和$nin 查询 包含或不包含 (只能用在数组集合上,和下面的$not区分开)
例如:查询包含 "image1" : "img/IMG_6104_03.png"和"image1" : "img/IMG_6105_03.png" 的整条数据信息。反之使用$nin。
3、or查询 满足条件1或者满足条件2个的数据
例如:查询"image1" : "img/IMG_6104_03.png" 或 price小于20的数据
4、正则查询
例如:查询image1中包含 6105_03 的数据
5、$not :(取反)
例如:查询image1中不包含 6105_03 的数据,我们可以看到这次查出来的数据和上面那个查出来的数据加一块就是全部的数据。
下面主要讲数组相关的查询
6、数组查询和index使用(①:查询数组中包含某个内容的那条数据,②:查询某个数组中的第几项是什么)
先来添加几个数组信息(给images是img/IMG_6104_03.png的数据添加一个数组books)
现在是这样
现在来查询数组中有cc和aa的数据
如果要查询第数组中第2项内容是ee的:(注意:这里的books.1是加引号的)
7、查询出数组长度是2的数据 (注意:这里的$size不能和比较符一起使用,也就是说不能使用数组长度小于2这样查询,见下一个方法)
8、把$size和比较符一起使用:
①:先来给每条数据添加一个size键,他的值对应数组长度,修改后的数据如下:
下面我们要做的是每次books中增加新内容的时候,size的值也跟着变化,这样我们就可以通过对size的大于小于来进行和$size的配合使用。
②:首先,在增加数组内容的同时把size的值增加1:
③:再来查看数组长度大于2的数据
9、利用shell来查看 价格是26的数据下 books 的数组长度:
var prices = db.persons.find({price:26}) ---->因为此时find出来的price是26的数据可能不止一条,所以下面要使用遍历的方式去获得books的数组长度。
10、$slice 查询:针对数组查询
例如:查询price是16的这条数据中books 中的第一个到第二个的数据,再查询第二个到第三个数据,注意看这里当有其实索引为0的时候跟其他时候的区别
查询数组中的最后一项:只需要把slice的条件改成-1。
11、$elemMatch 查询:根据数组对象中的条件进行查询,也可以是条件组合,多个条件顺序不分先后
四、分页与排序
1、查询persons中的前两条数据:db.persons.find({},{_id:0,class:1}).limit(2)
2、查询persons中第2到第4条数据:db.persons.find({},{_id:0,class:1}).limit(3).skip(1) ,limit里的数是显示几条数据,skip里的是从哪里开始,注意这个索引是从0开始的。
3、排序:返回按照 price 大小进行排序的结果
2017年第一天,祝大家新年快乐哦!