• mongodb查询文档


    说到查询,我们一般就想起了关系型数据库的查询了,比如:order by(排序)、limit(分页)、范围查询(大于某个值,小于某个值..,in查询,on查询,like查询等待很多),同样mongodb同样也支持这些操作,只是语法不同,比如排序:mongodb里面使用了skip(field:1/-1)方法,下面就来一一介绍一下:

    一、mongodb查询文档

      1.查询文档之find() : 不加条件是查询集合全部的数据

        语法:db.collectionName.find({条件},{field:true/false})

        1.1查询所有数据

          

          显示指定字段(与上图对比,find()第二个参数为指定查询的字段,格式[字段名:true/false]true为显示,false为不显示):

          

        1.2 查询数据总数 count()

          语法:db.collectionName.find({条件}).count()

          

      2. 查询一个文档 findOne() :默认是查询符合条件的第一条文档

        语法:db.collectionName.findOne({条件},{field:true/false})    

        

      3.pretty()方法:格式化显示查询的文档

        

    二、条件操作符("$and"、"$nor"、"$not"、"$or"、"$exists"、"$mod"、"$regex"、"$where"、"$slice"、"$elemMatch","null查询"、"$all"、"$size"、"$in"、"$nin"

      1.下面是一部分条件操作符的列表,含义、语法、以及和关系型数据库的对比

    等于 {<key>:<value>} db.col.find({"by":"zgw"}) where by = 'zgw'
    小于($lt) {<key>:{$lt:<value>}} db.col.find({"likes":{$lt:50}}) where likes < 50
    小于或等于($lte) {<key>:{$lte:<value>}} db.col.find({"likes":{$lte:50}}) where likes <= 50
    大于($gt) {<key>:{$gt:<value>}} db.col.find({"likes":{$gt:50}}) where likes > 50
    大于或等于($gte) {<key>:{$gte:<value>}} db.col.find({"likes":{$gte:50}}) where likes >= 50
    不等于($ne) {<key>:{$ne:<value>}} db.col.find({"likes":{$ne:50}})   where likes != 50

      

        语法:db.collectionName.find({field:{Operators1:value1,Operators2:value2}}) --[Operators:就是上面那些操作符()]

        php格式:array(field=>array('$lte'=>value)) 或者 array(field=>array('$gte'=>value1,'$lte'=>value2))

        

        下面是不等于操作符的查询:

        

      2.操作符:"$and"、"$nor"、"$not"、"$or"、"$exists"、"$mod"、"$regex"、"$where"、"$slice"、"$elemMatch","null查询"、"$all"、"$size"、"$in"、"$nin"

        2.1 null查询以及空查询(' ') : 

          下面是数据库中的三条数据,接下来就用这三条数据来演示如何查询null值和空(' ')

          

          2.1.1 查询空值(' ')---不存在该字段文档不会被查询出来

            

           2.1.2 查询null值---查询字段值是null的文档,文档中不存在该字段也会被查询出来

            

            查询字段存在,并且值为null,(穿插介绍)需要使用[$in和$exists]来帮忙,其中$in表示匹配键值为数组内的任意值的文档,$exists则表示判断该字段是存在于集合中(true存在,false不存在)

               

        2.2 $in 匹配键值为数组内的任意值的文档 (相当于关系型数据库中的 where id in(1,2,3,4,5.....))

          

        2.3 $nin 匹配键值不存在数组内的任意值的文档 (相当于关系型数据库中的 where id not in(1,2,3,4,5.....))

          

        2.4 $exists 判断该字段是存在于集合中(true为存在,false为不存在)

          

        2.5 $and --- 连接多个条件,也可以直接使用逗号分隔

          

        2.6 $nor 指定至少一个或多个表达式,找出不满足它的文档(就是找出条件相反的文档)

          

        2.7 $or 指定至少一个或多个表达式,只要满足其中一个表达式的文档都查询出来

          

        2.8 $mod 取模(就是我们说的取余数比如:30除4等7,余2,这个2就是取模的结果)

          

          当遇到字段的值为null,则使用$where 代替$mod,javascript中会把null转换成0

          

          

        2.9 $where 操作符功能强大而且灵活,他可以使用任意的JavaScript作为查询的一部分,包含JavaScript表达式的字符串或者JavaScript函数。

          比较文档中的两个键的值是否相等.例如查找出banana等于peach键值的文档

          

          注意:我们尽量避免使用"Where"BSONJavaScript"Where"査询,因为它们在速度上要比常规査询慢很多。每个文档都要从BSON转换成JavaScript对象,然后通过"where"的表达式来运行;同样还不能利用索引

        3.0 $regex 操作符查询中可以对字符串的执行正则匹配(只对字符串有效)。 MongoDB使用Perl兼容的正则表达式(PCRE)库来匹配正则表达式,类似关系型数据库的where name like '%string%'

          

        3.1 $elemMatch 

         

      未完待续:http://www.cnblogs.com/egger/p/3135847.html

           http://www.cnblogs.com/zhaoyang/archive/2012/01/10/2317664.html

      

  • 相关阅读:
    virtualbox 设置鼠标在虚拟机和电脑之间切换
    7-nginx 配置记录 http 请求参数(如记录URL参数)的 log 和 nginx 常见的一些内置变量
    BufferedWriter 没有比FileWriter 快多少
    锁、线程锁、锁旗标、锁对象
    all 2 branches missed
    使用xmp path进行行变列的SQL语句
    程序员的健身课
    zookeeper启动报错:Error: Could not find or load main class org.apache.zookeeper.server.quorum.QuorumPeerMain
    clickhouse数仓:mysql数据到clickhouse的离线、实时与全量、增量的方案调研
    sql语句分为三类(DML,DDL,DCL)
  • 原文地址:https://www.cnblogs.com/zengguowang/p/5582935.html
Copyright © 2020-2023  润新知