使用MongoDB \ Driver \ Query中的选项

时间:2018-02-19 12:02:08

标签: php database mongodb

我试图在MongoDB \ Driver \ Query中使用选项:

$options = array();
...
if (isset($limit['page']))
    {$options['skip']=($limit['page'] - 1) * $limit['hpp'];}//20
if (isset($limit['hpp']))
    {$options['limit']=$limit['hpp'];//20
    $options['batchSize']=$limit['hpp'];}//20
print('<br />--------$options :<br />');
print_r($options);
$query = new MongoDB\Driver\Query($search, $options);
print('<br />********$query :<br />');
echo '<pre>';
print_r($query);
echo  '</pre>';

如果$ options似乎没问题:

  

-------- $ options:
  数组([sort] =&gt;数组([_id] =&gt; 1)[跳过] =&gt; 20 [限制] =&gt; 20 [batchSize] =&gt; 20)

$ query并没有给我很好的选择:

********$query :  
MongoDB\Driver\Query Object  
(  
[query] => stdClass Object  
    (  
        [$orderby] => stdClass Object  
            (  
                [_id] => 1  
            )  
         [$query] => stdClass Object  
            (  
            )  
     )  
[selector] =>  
[flags] => 0  
[skip] => 20  
[limit] => 0  
[batch_size] => 0  
[readConcern] =>  
)

limit和batch_size不等于20,为什么?怎么办,拜托?

提前致谢

1 个答案:

答案 0 :(得分:1)

在PHP 7.2.2上测试:

var ext = fileSplit[ fileSplit.length - 1];

输出:

  

MongoDB \ Driver \ Query Object(       [filter] =&gt; stdClass对象           (               [_id] =&gt; 5a8adcf335f6d112d00e46c8           )

<?php
$options= [
    'skip' => 20,
    'limit' => 20,
    'batchSize' => 20   
];

$filter= [
'_id' => '5a8adcf335f6d112d00e46c8'
];

$query= new MongoDB\Driver\Query($filter, $options);
print_r($query);

解决方案(取自评论)

[options] => stdClass Object ( [batchSize] => 20 [skip] => 20 [limit] => 20 ) [readConcern] => ) 传递给Query实例的参数以类型敏感的方式处理,在作者的情况下,参数从用户输入传递并作为“字符串”传输而不是“数字”作为例外。解决方案是在解决问题的参数上使用intval()

如果事情仍无法按预期工作 - 请更新MongoDB

我检查了MongoDB PECL repo的更改日志,但在修复错误时无法找到。我建议更新到the most current version并再次测试。