query对象常用options
-
返回指定的字段
_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]) -
分页
$query = new Query([],['projection'=> ['skip' => $skip_num, 'limit' => $limit_num]]); //skip 指跳过多少条记录, limit 指返回几条,利用这两个参数,我们就可以实现分页 //tips: 据说skip是一条一条数过去的,数据量大的时候,肯能有性能的问题,在此标记下, 以后验证 -
排序
// value = 1 || -1, 1 asc -1 desc $query = new Query([],['projection'=> ['skip' => $skip_num, 'sort' => ['field_name' =>$value]]]);
command 类的使用
使用PHP提供的mongodb的command类,我们也能实现数据库的增删改查.
下面是个简单的示例,可以在mongod官网上找到更详细的内容
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 的内容就不会出现了。