MongoDB条件操作符(⼤于,⼩于等)模糊查询,类型查询符(七)当⽤find显⽰⽂档时是显⽰全部,当⽂档⾜够多,⽽⾃⼰需要的只是满⾜某些值的⽂档,如果还⽤find 就太浪费资源了MongoDB中条件操作符有:
(>) ⼤于 - $gt
(<) ⼩于 - $lt
(>=) ⼤于等于 - $gte
(<= ) ⼩于等于 - $lte
在SQL语句中这些条件操作符对应的是
$gt ----------- >
$gte --------- >=
$lt ------------ <
$lte ---------- <=
$ne ---------- != //下⾯没写但是和上⾯的⽤法⼀样
$eq ---------- =
1、⼤于(>)操作符
类似于 SQL语句⾥的
Select * from collection where 字段符号数值(例如:num > 300);
先查看数据
> db.col.find()
{ "_id" : ObjectId("5d02074bc31878d18503d810"), "num" : "500" }
{ "_id" : ObjectId("5d0208d6c31878d18503d812"), "num" : "300" }
{ "_id" : ObjectId("5d0208d6c31878d18503d813"), "num" : 200 }
{ "_id" : ObjectId("5d020b4ac31878d18503d814"), "num" : 300 }
{ "_id" : ObjectId("5d020b4ac31878d18503d815"), "num" : 400 }
{ "_id" : ObjectId("5d020b4ac31878d18503d816"), "num" : 500 }
查询
num 字段⼤于300的⽂档
> db.col.find({num:{$gt:300}}) //这个就是查询某字段⼤于300值的⽂档
{ "_id" : ObjectId("5d020b4ac31878d18503d815"), "num" : 400 }
{ "_id" : ObjectId("5d020b4ac31878d18503d816"), "num" : 500 }
mongodb和mysql结合这会发现⼀个有趣的现象,这解释⼀下,有两个num字段 为500,但是只显⽰⼀个
原因:在创建⽂档时,有的字段的值⽤的是字符串的格式,如
⽽如果是数值类型的就可以被操作符筛选,如下:
⼩于(<),⼤于等(>=),⼩于等于(<=) 就不写了,和⼤于⼀样,只是符号改变了
2、同时运⽤⼤于(>)和⼩于(<)
在实际数据库查询中肯定有⽤到有个字段的值符合既⼤于⼀个数⼜⼩于另⼀个数的情况
语法:
//例如({num:{$lt:500,$gt:300}}),num字段的值⼩于500,⼤于300
类似于 SQL语句⾥的
Select * from collection where 字段符号数值 AND 字段符号数值
(例如:num < 500 AND num > 300);
先准备数据
> db.col.find()
{ "_id" : ObjectId("5d0208d6c31878d18503d813"), "num" : 200 }
{ "_id" : ObjectId("5d020b4ac31878d18503d814"), "num" : 300 }
{ "_id" : ObjectId("5d020b4ac31878d18503d815"), "num" : 400 }
{ "_id" : ObjectId("5d020b4ac31878d18503d816"), "num" : 500 }
开始按条件查询(⼩于500,⼤于300)
> db.col.find({num:{$lt:500,$gt:300}})
{ "_id" : ObjectId("5d020b4ac31878d18503d815"), "num" : 400 }
下⾯关于⼤于和⼤于等于等等的就不写了,好上⾯⼀样,只是符号改变了
3、模糊查询
在实际的查询中不光是上⾯对数值按⼤⼩范围来查询,还有对于字符串的按模糊匹配查
{字段:/某字/} :某字段包含某字
{字段:/^某字/} : 某字段以某字开头
{字段:/某字$/} : 某字段以某字结尾
准备数据
> db.col.find()
{ "_id" : ObjectId("5d0346819cd49366b7f099ee"), "title" : "教育" }
{ "_id" : ObjectId("5d0346819cd49366b7f099ef"), "title" : "⼈民教师" }
{ "_id" : ObjectId("5d0346819cd49366b7f099f0"), "title" : "任教" }
(1)某字段包含某个字的查询
语法
title字段中包含教的⽂档
> db.col.find({title:/教/}) //这就没加双引号
{ "_id" : ObjectId("5d0346819cd49366b7f099ee"), "title" : "教育" }
{ "_id" : ObjectId("5d0346819cd49366b7f099ef"), "title" : "⼈民教师" }
{ "_id" : ObjectId("5d0346819cd49366b7f099f0"), "title" : "任教" }
(2)某字段以某字开头的⽂档
语法
title字段中以教为开头的⽂档
> db.col.find({title:/^教/}))
{ "_id" : ObjectId("5d0346819cd49366b7f099ee"), "title" : "教育" }
(3)某字段以某字结尾的⽂档
语法
title字段中以教为结尾的⽂档
> db.col.find({title:/教$/}))
{ "_id" : ObjectId("5d0346819cd49366b7f099f0"), "title" : "任教" }
4、类型操作符
MongoDB对于某个字段的值的类型可以是不同的,对于MySQL这种传统数据库⽽⾔,必须先定义这个列的类型才能添加数据,所以MongoDB提供了类型查询,就是此字段必须是什么类型,其他的类型过滤掉
语法
//例如{title:{$type:"string"}},查询title字段必须是string类型的⽂档
准备数据
> db.col.find()
{ "_id" : ObjectId("5d0346819cd49366b7f099ee"), "title" : "教育" }
{ "_id" : ObjectId("5d0346819cd49366b7f099ef"), "title" : "⼈民教师" }
{ "_id" : ObjectId("5d0346819cd49366b7f099f0"), "title" : "任教" }
{ "_id" : ObjectId("5d0376e49cd49366b7f099f1"), "title" : 555 }
title字段必须是string类型的
> db.col.find({title:{$type:"string"}})
{ "_id" : ObjectId("5d0346819cd49366b7f099ee"), "title" : "教育" }
{ "_id" : ObjectId("5d0346819cd49366b7f099ef"), "title" : "⼈民教师" }
{ "_id" : ObjectId("5d0346819cd49366b7f099f0"), "title" : "任教" }
或者
> db.col.find({title:{$type:2}}) //MongoDB中检索集中的数据类型string可以⽤2代替
{ "_id" : ObjectId("5d0346819cd49366b7f099ee"), "title" : "教育" }
{ "_id" : ObjectId("5d0346819cd49366b7f099ef"), "title" : "⼈民教师" }
{ "_id" : ObjectId("5d0346819cd49366b7f099f0"), "title" : "任教" }
上⾯这种⽅法是MongoDB⾃⼰独有的,MySQL等没有
下⾯是⼏种常见的检索集中数据类型对应
类型数字
Double1
String2
Object3
Array4
Binary data5
类型数字
Object id7
Boolean8
Date9
Null10还有有⼀些特殊的,,有可能因为版本的问题有什么修改,⼀切以官⽹为准
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论