zoukankan      html  css  js  c++  java
  • PHP操作Mongodb之高级查询篇

    本文主要讲解PHP中Mongodb的除了增删改查的一些其他操作。

    PHP操作Mongodb之增删改查篇中我们介绍了PHP中Mongodb的增加、删除、修改及查询数据的操作。本文主要是将查询时用到的高级知识跟大家分享下。

    1、查询时的排序

    在关系型数据库的查询中,往往会用到排序。例如时间倒序,点击率升序啦等等。在Mongodb的查询中,也有排序功能的。

    语法格式:

    $db->find()->sort(array('age' => 1));    //按age字段升序排序。1为升序,-1为降序。

    例如:

    <?php
        //连接数据库
        $connnect = new Mongo("mongodb://127.0.0.1:27017");
        //选择数据库
        $db = $connnect->selectDB('mydb')->selectCollection("user");
        //查询所有数据,按age字段升序排序
        $cursor = $db->find()->sort(array('age' => 1));
    
        $array = array();
        while($cursor->hasNext()) {
            $array[] = $cursor->getNext();
        }
        echo "<pre>";
        print_r($array);
    ?>

    运行结果为:

    学吧网

    2、查询时的skip和limit操作

    同样,在关系型数据库中,有limit可以限制查询区间。在Mongodb中也有类似的功能,那就是skip和limit操作。skip是跳过前多少条数据;limit是查询多少条数据。例如接着上面的列子,我们从第二条数据开始,查询一条数据。代码如下:

    <?php
        //连接数据库
        $connnect = new Mongo("mongodb://127.0.0.1:27017");
        //选择数据库
        $db = $connnect->selectDB('mydb')->selectCollection("user");
        //按age字段升序查询,从第二条开始,查询一条数据
        $cursor = $db->find()->sort(array('age' => 1))->skip(1)->limit(1);
    
        $array = array();
        while($cursor->hasNext()) {
             $array[] = $cursor->getNext();
        }
        echo "<pre>";
        print_r($array);
    ?>

    运行结果如下:

    学吧网

    3、查询时的字段筛选

    在查询时,我们往往会遇到,只需要查询某一个或者多个特定的字段,这就涉及到字段筛选。语法格式如下:

    $db->find(array(), array('age' => true));    //第一个参数是查询条件,第二个参数是字段筛选。值为true,表示查询该字段;值为false,表示不查询该字段。

    例如上面的列子,我们只想查询年龄这个字段,代码如下:

    <?php
        //连接数据库
        $connnect = new Mongo("mongodb://127.0.0.1:27017");
        //选择数据库
        $db = $connnect->selectDB('mydb')->selectCollection("user");
      
        //查询age和id两个字段。
        $cursor = $db->find(array(), array('age' => true, 'id' => true));
    
        $array = array();
        while($cursor->hasNext()) {
            $array[] = $cursor->getNext();
        }
        echo "<pre>";
    ?>

    运行结果如下:

    学吧网

    4、查询时的Like操作

    在查询时,我们也会遇到需要模糊查询的时候。在关系型数据库中使用like查询即可,在mongodb数据库中,也有模糊查询的操作。语法格式如下:

    $db->find(array('name' => new MongoRegex("/^j/")));

       //mongodb中的模糊查询是通过正则查询的

    例如上面的例子,我们查询名字以j开头的数据,代码如下:

    <?php
        //连接数据库
        $connnect = new Mongo("mongodb://127.0.0.1:27017");
        //选择数据库
        $db = $connnect->selectDB('mydb')->selectCollection("user");
        //查询name字段以j开头的数据
        $cursor = $db->find(array('name' => new MongoRegex("/^j/")));
    
        $array = array();
        while($cursor->hasNext()) {
            $array[] = $cursor->getNext();
        }
        echo "<pre>";
        print_r($array);
    ?>

    运行结果如下:

    学吧网

    5、查询时的count操作

    在查询时,我们也许会碰到需要查询满足条件的数据的总和。这时就用到了count操作。语法格式如下:

    $db->count(); 

    例如上面的例子,我们查询数据数据库中的数据总和。代码如下:

    <?php
        //连接数据库
        $connnect = new Mongo("mongodb://127.0.0.1:27017");
        //选择数据库
        $db = $connnect->selectDB('mydb')->selectCollection("user");
    
        echo $db->count();
    ?>

    运行结果是:3

    6、查询时的or操作

    在查询时,我们也许也会用到or操作。语法格式如下:

    $db->find(array('$or' => array(array('id' => 1), array('name' => 'java'))));

    例如上面的例子,我们查询id是1,或者name是java的数据。代码如下:

    <?php
        //连接数据库
        $connnect = new Mongo("mongodb://127.0.0.1:27017");
        //选择数据库
        $db = $connnect->selectDB('mydb')->selectCollection("user");
    
        $cursor = $db->find(array('$or' => array(array('id' => 1), array('name' => 'java'))));
    
        $array = array();
        while($cursor->hasNext()) {
            $array[] = $cursor->getNext();
        }
        echo "<pre>";
    ?>

    运行结果是:

    学吧网

  • 相关阅读:
    Educational Codeforces Round 83 --- F. AND Segments
    Educational Codeforces Round 83 --- G. Autocompletion
    SEERC 2019 A.Max or Min
    2019-2020 ICPC Southwestern European Regional Programming Contest(Gym 102501)
    Educational Codeforces Round 78 --- F. Cards
    今天我学习了一门全新的语言
    codeforces 1323D 题解(数学)
    Educational Codeforces Round 80 (Div. 2) 题解 1288A 1288B 1288C 1288D 1288E
    Educational Codeforces Round 81 (Div. 2) 题解 1295A 1295B 1295C 1295D 1295E 1295F
    Codeforces Round #617 (Div. 3) 题解 1296C 1296D 1296E 1296F
  • 原文地址:https://www.cnblogs.com/marixh/p/5083485.html
Copyright © 2011-2022 走看看