mongodb常用查询操作

query对象常用options

  1. 返回指定的字段

    _id 是默认默认返回的,我们可以指定 '\_id'=>0, 阻止其默认行为

    //控制字段
    $query = new Query([],['projection'=> ['filed_name_1' => 1, 'file_name_2'=>1,'....']]);
    //控制内嵌文档,这样只会返回student字段的name属性,更精细的控制
    $query = new Query([],['projection'=> ['student.name' => 1]]);
    //数组切片, 这种形式的 $slice 的参数分别是 skip,limit ,表示跳过一个元素,并返回2个元素
    $query = new Query([],['gallery'=>['$slice'=>[1,2]]])
    //这时 $slice 的参数是limit,返回几条数据,可以为负数,表示从尾部返回
    $query = new Query([],['gallery'=>['$slice'=>1])
    
  2. 分页

    $query = new Query([],['projection'=> ['skip' => $skip_num, 'limit' => $limit_num]]);
    //skip 指跳过多少条记录, limit 指返回几条,利用这两个参数,我们就可以实现分页
    //tips: 据说skip是一条一条数过去的,数据量大的时候,肯能有性能的问题,在此标记下, 以后验证
    
  3. 排序

    // value = 1 || -1,      1 asc -1 desc
    $query = new Query([],['projection'=> ['skip' => $skip_num, 'sort' => ['field_name' =>$value]]]);
    

command 类的使用

使用PHP提供的mongodb的command类,我们也能实现数据库的增删改查.

下面是个简单的示例,可以在mongod官网上找到更详细的内容

mongodb-command

public function test(){
        $command = new Command(['find'=> 'news','filter'=>['city'=>33],'comment'=> 'what are you doing','sort'=>['updted'=>-1]]);
        $res = $this->mongoManager->executeCommand($this->db, $command);
        return $res;
    }

上面返回的结果是cursor的对象,我们可以使用foreach进行遍历, cursor本身具有toArray()方法,但是调用这个方法,会丢失一些信息,比如,comment 的内容就不会出现了。