mongodb的各种查询方法

1.查询比较写法:
查询某个字段比指定值小:$lt
//假设存在集合USERdb.USER.find({REGIST_DATE:{$lt:new Date(2013,0,1)}});
/*前面提到过mongo完全遵守JAVASCRIPT语法,在JAVASCRIPT里面,月份是从0开始的,即上面的查询是查询2013-1-1以前注册的的用户。*/
查询某个字段比指定值大:$gt
db.USER.find({REGIST_DATE:{$gt:new Date(2013,0,1)}});
/*$lt表示小于,表示大于的自然就是$gt了*/
大于等于:$gte   小于等于:$lte
db.USER.find({REGIST_DATE:{$gte:new Date(2013,0,1),$lte:new Date(2013,0,31)}});
/*关于这个时间的问题看起来似乎有些别扭哈,没办法啦,MONGO就是这样啦。习惯就好啦。*/
/*上面的一行查询就是针对REGIST_DATE的组合查询形式,表示查询出所有在2013-1-1到2013-1-31注册的用户*/
2.$in---相当于sql的in,它可以利用索引
db.USER.find(NAME:{$in:['tom','jerry']});
/*如果为NAME字段创建了索引,它就会从索引里面查找*/
/*mongo是区分大小写的,所以集合和文档属性的名字必须与创建它们的时候一致。*/
/*也就是NAME和name是两个不同的属性,它们可以同时存在于一个文档内*/
/*在一个集合内如果即存在NAME属性的文档,又存在name属性的文档,那么上面的那条命令不会把name属性查询出来*/
$nin---$in的相反操作,相当于sql的not in
db.USER.find(NAME:{$nin:['tom','jerry']});
注意:$nin不会利用索引,也就是说上面的命令$nin不会使用针对NAME属性的索引。
$all---没有sql类似的特性与之类比了
它的意义在于:查询条件是一个简单值数组,只有返回属性满足数组内的所有值的文档。这种查询条件只有在属性值是一个数组的情况下。
下面要查询同时包含'nosql'和'mongo'这两个标签的博文
db.blog.find(tags:{$all:['nosql','mongo']});
$ne---不等性比较,它接收单值或数组
db.blog.find(tags:{$ne:'nosql'});//返回所有不包含nosql标签的博文
db.blog.find(tags:{$ne:['nosql','mongo']});//返回所有不包含nosql和mongo这两个标签的博文
$size---检查一个数组的尺寸,不利用索引,不能做范围查询,以后可能会增加这方面的支持
有时iteye会给用户快递一些奖品,iteye可能会把用户曾经填过的地址保存下来。可以这么保存
在USER集合里增加一个address属性,没有留过地址的可以没有。
$not---取反值,只有在没有指定相反操作时才需要用到它。因为绝大部分操作符都有对应的相反操作,所以应当尽量使用相反操作符,比如正则表达式匹配没有相反操作
假如有一天,ITEYE只允许用户名以字母开头了就可以把所有不以字母开头的用户查出来给他们发一封邮件,让他们改名。
db.USER.find(accountName:{$not:/^[a-zA-Z]/})
当然$not也接收单值,但是不建议使用
$exists----检查某个属性的存在性。
比如要把所有包含附件的博文查询出来。
db.blog.find({attachment:{$exists:true}});
没有附件的就是db.blog.find({attachment:{$exists:false}});
或才可以这样做:
db.log.find({attachment:null});//不存在
db.blog.find({attachment:{$ne:null}});//存在
$mod-----求余数,不利用索引
假如说某天ITEYE心血来潮要给所有年龄能被4整队的用户快递一份奖品。
db.USER.find({age:{$mod:[4,0]}});//数组的第一个值是除数,第二个值是期望的余数
$type---以属性类型查询
虽然不建议在同一集合的不同文档相同属性名保存着不同类型的数据,但是有时由于程序bug或设计不严谨可能会出现这种情况。现在要把这种情况找出来,比如_ID属性有的是ObjectID类型,有的是整数。下面把所有_ID是字符串的文档找出来。
db.USER.find(_id:{$type:2})
db.USER.find(_id:{$not:{$type:7}});//把所有主键ObjectID类型的文档找出来
$or  $and----逻辑运算
它们的意义就不多解释了。不过它们的用法非常有意思
比如找出所有月收入在20000以上或2000以下的用户
db.USER.find({$or:[{salary:{$gt:20000}},{salary:{$lt:2000}}]});
找出所有月收入在8000以上,20000以下的用户
db.USER.find({$and:[{salary:{$gte:8000}},{salary:{$lte:20000}}]});
$where-----接收一段javascript代码作为查询条件,不利用索引
假如说要查询所有闰年出生的用户  www.2cto.com  
db.USER.find({$where:'var year=birthday.getFullYear();return year%4==0 && year%100>0 || year%400==0';});

猜你喜欢

转载自welcome66.iteye.com/blog/1897584