2024年PHP开发者大会日本站

MongoDB\Driver\Query::__construct

(mongodb >=1.0.0)

MongoDB\Driver\Query::__construct创建一个新的Query

描述

final public MongoDB\Driver\Query::__construct(数组|对象 $filter, ?数组 $queryOptions = null)

构造一个新的MongoDB\Driver\Query,这是一个不可变的值对象,表示数据库查询。然后可以使用MongoDB\Driver\Manager::executeQuery()执行该查询。

参数

filter (数组|对象)

查询谓词。» 查询谓词。空谓词将匹配集合中的所有文档。

注意评估查询条件时,MongoDB 会根据其自身的» BSON 类型比较规则比较类型和值,这与 PHP 的比较类型转换规则不同。匹配特殊 BSON 类型时,查询条件应使用相应的BSON 类(例如,使用MongoDB\BSON\ObjectId匹配» ObjectId)。

queryOptions

queryOptions
选项 类型 描述
allowDiskUse 布尔值

允许MongoDB使用临时磁盘文件来存储在处理阻塞排序操作时超过100 MB系统内存限制的数据。

allowPartialResults 布尔值

对于针对分片集合的查询,如果某些分片不可用,则从mongos返回部分结果,而不是抛出错误。

如果未指定,则回退到已弃用的"partial"选项。

awaitData 布尔值 "tailable"选项结合使用,如果在数据末尾而不是返回无数据的情况下,暂时阻塞游标上的getMore操作。超时后,查询将正常返回。
batchSize 整数

在第一批中返回的文档数量。默认为101。批大小为0表示将建立游标,但在第一批中不会返回任何文档。

在3.2之前的MongoDB版本中,如果查询使用旧版线协议OP_QUERY,则批大小为1将关闭游标,而不管匹配的文档数量。

collation 数组|对象

» 排序规则允许用户指定特定于语言的字符串比较规则,例如大小写和重音符号的规则。指定排序规则时,"locale"字段是必需的;所有其他排序规则字段都是可选的。有关字段的描述,请参阅» 排序规则文档

如果未指定排序规则,但集合具有默认排序规则,则操作将使用为集合指定的排序规则。如果未为集合或操作指定排序规则,则MongoDB将使用先前版本中用于字符串比较的简单二进制比较。

此选项在MongoDB 3.4+中可用,如果为旧版服务器版本指定此选项,则会在执行时导致异常。

comment 混合类型

任意注释,用于帮助通过数据库分析器、currentOp输出和日志跟踪操作。

对于MongoDB 4.4+,注释可以是任何有效的BSON类型。较早的服务器版本仅支持字符串值。

如果未指定,则回退到已弃用的"$comment"修饰符。

exhaust 布尔值

以多个“更多”包的方式全速传输数据,假设客户端将完全读取所有查询到的数据。当您提取大量数据并且知道要提取所有数据时,速度更快。注意:除非客户端关闭连接,否则不允许客户端不读取所有数据。

MongoDB 3.2+中的find命令不支持此选项,并且将强制驱动程序使用旧版线协议版本(即OP_QUERY)。

explain 布尔值

如果为true,则返回的MongoDB\Driver\Cursor将包含单个文档,该文档描述用于返回查询的流程和索引。

如果未指定,则回退到已弃用的"$explain"修饰符。

MongoDB 3.2+中的find命令不支持此选项,并且仅在使用旧版线协议版本(即OP_QUERY)时才会被遵守。» explain命令应在MongoDB 3.0+上使用。

hint 字符串|数组|对象

索引规范。指定索引名称(作为字符串)或索引键模式。如果指定,则查询系统将仅考虑使用暗示索引的计划。

如果未指定,则回退到已弃用的"hint"选项。

let 数组|对象

参数名称和值的映射。值必须是常量或封闭表达式,不引用文档字段。然后可以在聚合表达式上下文中访问参数作为变量(例如$$var)。

此选项在MongoDB 5.0+中可用,如果为旧版服务器版本指定此选项,则会在执行时导致异常。

limit 整数

要返回的最大文档数。如果未指定,则默认为无限制。限制为0等效于设置无限制。

负限制将被解释为具有"singleBatch"选项设置为true的正限制。此行为是为了向后兼容而支持的,但应视为已弃用。

max 数组|对象

特定索引的*独占*上限。

如果未指定,则回退到已弃用的"$max"修饰符。

maxAwaitTimeMS 整数

正整数,表示服务器在没有可用数据时阻塞getMore操作的时间限制(以毫秒为单位)。此选项应仅与"tailable""awaitData"选项一起使用。

maxScan 整数
警告

此选项已弃用,不应使用。

正整数,表示执行查询时要扫描的最大文档数或索引键数。

如果未指定,则回退到已弃用的"$maxScan"修饰符。

maxTimeMS 整数

处理游标上的操作的累积时间限制(以毫秒为单位)。MongoDB将在最早的后续中断点中止操作。

如果未指定,则回退到已弃用的"$maxTimeMS"修饰符。

min 数组|对象

特定索引的*包含*下限。

如果未指定,则回退到已弃用的"$min"修饰符。

modifiers 数组 修改查询输出或行为的» 元运算符。建议使用命名选项代替这些运算符。
noCursorTimeout 布尔值 防止服务器在一段时间(10分钟)的空闲后超时空闲游标。
oplogReplay 布尔值

副本集的内部使用。要使用oplogReplay,必须在过滤器中包含以下条件

[ 'ts' => [ '$gte' => <timestamp> ] ]

注意此选项从1.8.0版本开始已弃用。

projection 数组|对象

用于确定要包含在返回的文档中的字段的» 投影规范

如果您使用ODM 功能将文档反序列化为其原始 PHP 类,请确保在投影中包含__pclass字段。这是反序列化工作所必需的,如果没有它,扩展程序将(默认)返回stdClass对象。

readConcern MongoDB\Driver\ReadConcern

应用于操作的读取关注点。默认情况下,将使用MongoDB 连接 URI中的读取关注点。

此选项在 MongoDB 3.2+ 中可用,如果为较旧的服务器版本指定此选项,则会在执行时引发异常。

returnKey 布尔值

如果为true,则仅返回结果文档中的索引键。默认值为false。如果为true且 find 命令未使用索引,则返回的文档将为空。

如果未指定,则回退到已弃用的"$returnKey"修饰符。

showRecordId 布尔值

确定是否为每个文档返回记录标识符。如果为true,则向返回的文档添加顶级"$recordId"字段。

如果未指定,则回退到已弃用的"$showDiskLoc"修饰符。

singleBatch 布尔值 确定是否在第一批后关闭游标。默认为false
skip 整数 要跳过的文档数量。默认为 0。
snapshot 布尔值
警告

此选项已弃用,不应使用。

防止游标因介入的写操作而多次返回同一个文档。

如果未指定,则回退到已弃用的"$snapshot"修饰符。

sort 数组|对象

结果排序的排序规范。

如果未指定,则回退到已弃用的"$orderby"修饰符。

tailable 布尔值 为限定集合返回可跟踪游标。

错误/异常

变更日志

版本 描述
PECL mongodb 1.14.0

添加了"let"选项。"comment"选项现在接受任何类型。

PECL mongodb 1.8.0

添加了"allowDiskUse"选项。

"oplogReplay"选项已弃用。

PECL mongodb 1.5.0

"maxScan""snapshot"选项已弃用。

PECL mongodb 1.3.0

添加了"maxAwaitTimeMS"选项。

PECL mongodb 1.2.0

添加了"allowPartialResults""collation""comment""hint""max""maxScan""maxTimeMS""min""returnKey""showRecordId""snapshot"选项。

"partial"选项重命名为"allowPartialResults"。为了向后兼容性,如果未指定"allowPartialResults",则仍将读取"partial"

删除了已弃用的"secondaryOk"选项,该选项已过时。对于使用旧版线协议 OP_QUERY 的查询,驱动程序将根据» 服务器选择规范根据需要设置secondaryOk位。

PECL mongodb 1.1.0 添加了"readConcern"选项。

示例

示例 #1 MongoDB\Driver\Query::__construct() 示例

<?php
/* 选择作者为“bjori”且浏览量至少为 100 的文档 */
$filter = [
'author' => 'bjori',
'views' => [
'$gte' => 100,
],
];

$options = [
/* 只返回匹配文档中的以下字段 */
'projection' => [
'title' => 1,
'article' => 1,
],
/* 按浏览量降序返回文档 */
'sort' => [
'views' => -1
],
];

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

$manager = new MongoDB\Driver\Manager('mongodb://127.0.0.1:27017');
$readPreference = new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::PRIMARY);
$cursor = $manager->executeQuery('databaseName.collectionName', $query, $readPreference);

foreach(
$cursor as $document) {
var_dump($document);
}

?>
添加笔记

用户贡献笔记

此页面没有用户贡献的笔记。
To Top