MongoDB数据库查询详解

今天详细讲 增删改查 中的查询。

提前准备好了一个数据文件,大家可以自己写一个:

一、查询全部数据: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 查询:根据数组对象中的条件进行查询,也可以是条件组合,多个条件顺序不分先后

db.persons.find({class:{$elemMatch:{b:"022",a:"001"}}},{_id:0,class:1})



四、分页与排序

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年第一天,祝大家新年快乐哦!


  • 9
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老虎帅呆了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值