接上一篇总结《深入查询表达式1》



上一篇我们介绍了mongodb的一些表达式的深入应用。可能大家觉得有些


指令比较难记,下面给大家介绍一些简洁的表达式。



给大家介绍的是以下两个指令:


【MongoDb探究】06-深入查询表达式2_javascript


分别是$where、$regex



(1)$where指令


我们使用$where来代替之前的查询指令。


我们查询商品价格大于5000的商品:


【MongoDb探究】06-深入查询表达式2_javascript_02



$where的原理是,在mongodb中,存储的是一个一个的对象,对象中是各种属性,


我们可以把对象一个一个的遍历一遍,遍历的过程中就会把磁盘上的二进制数据


转化成一个个json对象,然后把其中的属性值读出来,那么我们就可以使用js中的


判断式去引用。



使用$where会使查询表达式变得非常的简洁易懂,如:


例:取出价格大于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});


【MongoDb探究】06-深入查询表达式2_mongodb_03



使用$where表达式


db.goods.find({$where:'this.shop_price>100 && this.shop_price<300 || this.shop_price>3000 && this.shop_price<5000'},{shop_price:1,goods_name:1,_id:0});

【MongoDb探究】06-深入查询表达式2_json_04


(2)$regex


$regex表达还实际起到是“正则表达式”的作用。


例:查询商品名开头含有“诺基亚”的商品


db.goods.find({goods_name:{$regex:/^诺基亚.*/}},{goods_name:1,_id:0});


【MongoDb探究】06-深入查询表达式2_json_05



不推荐使用$where和$regex表达式操作大量数据,原因是因为必须将磁盘上的二进制数据


转化成一个个json对象,才能使用$where和$regex表达式将数据读出来,而不是


直接操作二进制数据,这样查询大量数据就会影响效率。



至此,我们的查询表达式全部介绍完毕。