当前位置: 首页 > 知识库问答 >
问题:

在MongoDB\驱动程序\查询中使用选项

阎建华
2023-03-14

我试图在MongoDB\驱动程序\查询中使用选项:

$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:
数组([排序]=

$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] =>  
)

限制和批量大小不等于20,为什么?请问怎么办?

提前感谢

共有1个答案

汲雅珺
2023-03-14

在PHP 7.2.2上测试:

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

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

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

产出:

MongoDB\驱动程序\查询对象([filter]=

 [options] => stdClass Object
    (
        [batchSize] => 20
        [skip] => 20
        [limit] => 20
    )

[readConcern] =>  )

解决方案(摘自评论)

作为options传递给查询实例的参数以类型敏感的方式处理,在作者的情况下,参数是从用户输入传递的,并作为“字符串”而不是“数字”传递的。解决方案是对解决问题的参数使用intval()

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

我检查了MongoDB PECL回购的变更日志,但找不到错误何时修复。我建议更新到最新版本并再次测试。

 类似资料:
  • 通过使用MongoDB和Java驱动程序,我有一个用户集合,我想根据他们的ObjectId进行查询(总体情况:我从ObjectId推断出对象的创建时间戳)。 问题是,用ObjectId查询似乎不起作用:我总是没有结果。为了测试的目的,我在搜索查询中硬编码了数据库中现有用户的ObjectId,只是为了确保我能得到结果: {“_id”:ObjectId(“565ef85ee4b0a4db3c2fc96

  • 我使用下面的mongo查询来获取最高温度。有人能帮助我们如何使用mongo java驱动程序,使用和在java中实现吗?

  • 我正在尝试使用MongoDBJava驱动程序作为聚合命令的一部分创建查询。目前我允许日期范围或特定日期数组作为参数。例如 日期范围查询工作正常,我解析xml并将其转换为在mongo中生成以下查询的DBObject; 对于指定日期,我只想返回在给定日期的00:00:00.000和第二天的00:00:00.000之间发生的结果。根据我对mongo查询的基本了解,我希望做一个类似于日期范围的$匹配,但是

  • 问题内容: 我正在尝试通过搜索“ _id”键在MongoDB中查找文档。我的文件看起来像这样- 我正在尝试将此文档搜索为- 但我得到以下错误- BasicDBObject的append方法支持(字符串键,值),如果我将“ _id”作为String传递给此方法,则不会匹配任何文档。 所以我的问题是如何传递“ _id”? 问题答案: 通过使用as作为查询来解决

  • 问题内容: 我有一个使用mongodb本机驱动程序的node.js应用程序。在使用节点v8.9.1将应用程序代码迁移到异步/等待的过程中,我努力寻找一种适合mongodb查询的好方法。mongodb驱动程序的主要问题是,所有查询都使用回调,其中对异步方法来说,promise函数是必需的。 备择方案: 猫鼬 -承诺不赞成使用查询,它会强制使用Schema模型,这对我的应用程序来说有点开销。 mong

  • 问题内容: 我正在尝试或在MongoDB中使用某些条件(使用Java驱动程序)。这就是我在做什么: 我想在这些条件下使用操作数,但是我想默认值是“和”,我不知道如何更改它。在上面的代码中,如果条件之一返回,结果也将是。 问题答案: 您正确地说,在查询中指定多个字段的“默认”是每个字段都用作条件过滤器,因此是“与”运算。 您可以使用具有以下语法的$ or操作数,通过OR子句执行MongoDB查询: