我试图在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,为什么?怎么办,拜托?
提前致谢
答案 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并再次测试。