0
点赞
收藏
分享

微信扫一扫

【MongoDb探究】05-深入查询表达式1


之前我们探讨了mongodb的“增删改查”,要知道,我们的增删改其实都离不开查询表达式,所以查询表达式在mongodb是非常重要的。关于查询其实我们只是介绍了以小部分。


关于mongodb的查询表达式,我们要进行深一步的了解。



我们有一个数据集,是商城的商品信息:


【MongoDb探究】05-深入查询表达式1_lt





我们要把商城的商品信息插入到mongodb上,商品有以下字段:


goods_id 商品主键
cat_id 所在栏目
goods_name 商品名
goods_number 商品剩余库存数量
click_count 点击量
shop_price 本店价格
add_time 添加时间


我们创建一个商城数据库(shop),然后创建一个商品表(goods),将数据集


中的数据全部加入进去


(数据量比较大的时候控制台处理不了,所以大家把数据分三次插入进去!):

【MongoDb探究】05-深入查询表达式1_lt_02

【MongoDb探究】05-深入查询表达式1_mongodb_03

【MongoDb探究】05-深入查询表达式1_lt_04



一共有id到32的数据,一共有31条数据。使用db.goods.fond();能查到31条数据说明我们数据全部插入了:


【MongoDb探究】05-深入查询表达式1_ne_05


db.goods.find().count();指令统计查出数据的数量。



接下来开始深入学习查询表达式。


注:以下查询基于导入的商品表。



1.基础查询 where练习



查出满足以下条件的商品


1.1:主键为32的商品


db.goods.find({goods_id:32});


【MongoDb探究】05-深入查询表达式1_lt_06



1.2:不属第3栏目的所有商品($nq)


$ne就是“!=”(不等于NotEqual)的意思


语法:{field:{$ne:value}}


作用:查filed列的值不等于value的文档


db.goods.find({cat_id:{$ne:3}},{cat_id:1,goods_name:1,_id:0});


【MongoDb探究】05-深入查询表达式1_nor_07



1.3:本店价格高于3000元的商品($gt)


$gt就是“>”(大于great)的意思


语法:{filed:{$gt:value}}


作用:查filed列的值大于value的文档


db.goods.find({shop_price:{$gt:3000}},{goods_name:1,shop_price:1,_id:0});


【MongoDb探究】05-深入查询表达式1_nor_08



1.4:本店价格低于等于100元的商品($lt)


$lt就是“<”(小于little)的意思


语法:{filed:{$lt:value}}


作用:查filed列的值小于等于value的文档(等于在后面加“e”即可,大于小于通用)


db.goods.find({shop_price:{$lte:100}},{goods_name:1,shop_price:1,_id:0});


【MongoDb探究】05-深入查询表达式1_ne_09



1.5:取出第4栏目或第11栏目的商品($in)


$in就是“in”(位于)的意思


语法:{filed:{$in:[数组内容]}}


作用:查filed列的值位于数组[]中的文档


db.goods.find({cat_id:{$in:[4,11]}},{cat_id:1,goods_name:1,_id:0});


【MongoDb探究】05-深入查询表达式1_lt_10



1.5.2:取出不在第4栏目或第11栏目的商品($nin)


$nin就是“notin”(不位于)的意思


语法:{filed:{$nin:[数组内容]}}


作用:查filed列的值不位于数组[]中的文档


db.goods.find({cat_id:{$nin:[4,11]}},{cat_id:1,goods_name:1,_id:0});


【MongoDb探究】05-深入查询表达式1_nin_11



1.6:取出100<=价格<=500的商品($and)


$and就是“and”(与)的意思


语法:{$and:[{filed:value1},{filed:value2}...]}


作用:查filed位于value1与value2之间的文档


db.goods.find({$and:[{shop_price:{$gte:100}},{shop_price:{$lte:500}}]},{shop_price:1,goods_name:1,_id:0});


【MongoDb探究】05-深入查询表达式1_mongodb_12



1.7:取出不属于第3栏目且不属于第11栏目的商品($and $nin和$nor分别实现)


$nor就是“Neither nor”(既不也不)的意思


语法:{$nor:[{filed:value1},{filed:value2}...]}


作用:查filed既不位于value1,也不value2的文档


db.goods.find({$nor:[{cat_id:3},{cat_id:11}]},{goods_name:1,cat_id:1,_id:0});


【MongoDb探究】05-深入查询表达式1_mongodb_13


db.goods.find({cat_id:{$nin:[3,11]}},{goods_name:1,cat_id:1,_id:0});


【MongoDb探究】05-深入查询表达式1_ne_14


db.goods.find({$and:[{cat_id:{$ne:3}},{cat_id:{$ne:11}}]},{goods_name:1,cat_id:1,_id:0});


【MongoDb探究】05-深入查询表达式1_nin_15



1.8:取出价格大于100且小于300,或者大于3000且小于5000的商品($or)



db.goods.find({$or:[{$and:[{shop_price:{$gt:100}},{shop_price:{$lt:300}}]},{$and:[{shop_price:{$gt:3000}},{shop_price:{$lt:5000}}]}]},{shop_price:1,goods_name:1,_id:0});



太长不太好理解,我们拆分一下:


原始语句:


{$or:[条件1,条件2]},{shop_price:1,goods_name:1,_id:0}



其中的条件1和2为以下两条:


{$and:[{shop_price:{$gt:100}},{shop_price:{$lt:300}}]}



{$and:[{shop_price:{$gt:3000}},{shop_price:{$lt:5000}}]}


【MongoDb探究】05-深入查询表达式1_nor_16



1.9:取出goods_id%5==1(对5取余等于1),即1,6,11,...这样的商品($mod)


$mod就是“mod”(取余)的意思


语法:{filed:{$mod:[num1,num2]}}


作用:查filed对num1取余之后结果是num2的所有数据


db.goods.find({goods_id:{$mod:[5,1]}},{goods_id:1,goods_name:1,_id:0});


【MongoDb探究】05-深入查询表达式1_nin_17



1.10:取出有add_time属性的文档($exists)


$exists就是“exists”(存在)的意思


语法:{filed:{$exists:1}}


作用:含有filed属性的文档将会被查到


db.goods.find({add_time:{$exists:1}},{goods_name:1,add_time:1,_id:0});


【MongoDb探究】05-深入查询表达式1_lt_18



1.11:取出属性为String类型的文档($type)


$type就是“type”(类型)的意思


语法:{filed:{$type:1}}


作用:filed属性类型为type的文档将会被查到


type类型用数字描述:


【MongoDb探究】05-深入查询表达式1_nor_19


db.goods.find(goods_name:{$type:2},{goods_id:1,goods_name:1,_id:0});


【MongoDb探究】05-深入查询表达式1_lt_20



1.12:取出student中爱好hobby数组中含有'b','c'的文档($all)


$all就是“all”(包含所有)的意思


语法:{filed:{$all:[数据1,数据2,数据3...]}}


作用:filed属性(一般是一个数组)中包含数据1/2/3...的文档将会被查到


db.student.find({hobby:{$all:['b','c']}});


【MongoDb探究】05-深入查询表达式1_nin_21



接下一篇《深入查询表达式2》

举报

相关推荐

0 条评论