zoukankan      html  css  js  c++  java
  • 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$/})

        

  • 相关阅读:
    Hibernate框架学习(二)——api详解
    Hibernate框架学习(一)——入门
    事务(二)——事务的特性和隔离级别
    事务(一)
    MySQL ------ 使用正则表达式进行搜索 regexp (八)
    MySQL ---- 过滤数据 通配符 like (七)
    Java --------- I/O(七) 序列化
    MySQL ------ 过滤数据 and、or、in、not(七)
    MySQL ------ 过滤数据 where 子句(六)
    MySQL ------ 排序检索(五)
  • 原文地址:https://www.cnblogs.com/wuxilc/p/4049151.html
Copyright © 2011-2022 走看看