Mongodb(五):Mongodb的增删改查(3)----查询详解(上)

MongoBD的查询说白了就是一个find()方法。But 还是有点小复杂。来吧

(1) 查询所有的数据:db.集合名.find(); 这没啥说的。

(2) 查询第一条数据:db.集合名.findOne(); 也没啥说的。

(3) 条件查询:db.集合名.find(查询条件),查询条件也是一种json格式的东东。所以理解json对于学Mongodb真的很重要。

    如下:查询name为zhangsan的记录:

    

(4) 组合条件查询:db.collection名.find({查询条件1,查询条件2,...}), 还是上面那个例子,现在假设要查询name为zhangsan,

    age为23:  db.customer.find({"name":"zhangsan", "age":23})

(5) 返回指定的字段:比如在关系型数据库中 select * ...是返回所有字段,select 字段1, 字段2....是返回两个字段,那么在Mong

    odb中怎样做到返回指定的字段呢? 格式:db.collection名.find({查询条件1,查询条件2,...},{字段1:1, 字段2:1,....}),

    其中1代表显示,如果是0就是不显示。默认是全部显示的。如果不想显示_id,必须显示的将 _id的是否显示置为0,如下:

    

(6) 范围查询:先看看比较操作符吧。$lt(<) , $gt(>), $lte(<=), $gte(>=), $ne(!=). 实例如下:

    

(7) $in查询:查询值在指定的集合内进行匹配.和SQL中的 in 差不多。如下:

    查询名字为zhangsan或者是lisi的用户的信息:

    

(8) $nin查询:对不在指定集合条件的记录进行匹配。和SQL中 not in类似,比如现在要查询name不是zhangsan或者lisi的信息:

    db.customer.find({"name":{"$nin":["zhangsan", "lisi"]}})

(9) $or查询:就是 或者 的意思嘛,上示例:查询name为zhangsan 或者 age 为13的用户的信息:

    db.customer.find({"$or":[{"name":"zhangsan"}, {"age":13}]}),如下所示:

    

    再写一个稍微复杂一点的,查询_id在 001或002中, 或者name为zhaoliu的用户的信息:

    db.customer.find({"$or":[{"_id":{"$in":["001", "002"]}}, {"name":"zhaoliu"}]}).如下所示:

    

(10)$not查询: $not和$nin的区别是$nin是只能用到集合上.$not范围广点。

    查询_id不在001和002中的用户的信息:db.customer.find({"_id":{"$not":{"$in":["001", "002"]}}})

    

(11)null:现在collection中有如下document:

    

    从上图可看到有些document中有sex,有些没有,有些为null, 输入如下命令:db.customer.find({"sex":null}),结果如下:

    

    从结果可以看出,不但sex为null的查询出来了,而且没有sex字段的document也查询出来了。如果要找到age为null的,还应该在

   这个基础上必须限制出现age.那怎么办呢?先放一放,说完下面这一条就出来了。

(12)$exists : 判断字段是否存在.比如,查询所有存在name字段的记录:db.customer.find({"name":{"$exists":true}}), 查

    询所有的不存在sex字段的记录:db.customer.find({"sex":{"$exists":false}}). 现在解决(11)中的问题:

    

    不过有一点觉得很奇怪:为什么不能像下面这样写?

    

    其实仔细想想也就明白了:因为条件的写法是遵循json格式,在json中,键不能重复,当重复的时候,后者会将前者覆盖,我想大概

    就是这个原因吧。

(12)正则表达式: 直接上示例:查询name中包含ang的用户的信息:db.customer.find({"name":/ang/})

    

    查询那么以 Z 开头的用户的信息:db.customer.find({"name":/^z/})

    查询以an结尾的用户的信息db.customer.find({"name":/an$/})

    

posted @ 2014-10-24 20:02  无西lc  阅读(204)  评论(0编辑  收藏  举报