MongoDB\Driver\Query::__construct

(mongodb >=1.0.0)

MongoDB\Driver\Query::__construct创建新的查询

描述

final public MongoDB\Driver\Query::__construct(array|object $filter, ?array $queryOptions = null)

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

参数

filter (array|object)

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

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

queryOptions

queryOptions
选项 类型 描述
allowDiskUse bool

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

allowPartialResults bool

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

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

awaitData bool "tailable" 选项一起使用,如果在数据末尾而不是返回无数据的情况下,暂时阻止游标上的 getMore 操作。在超时后,查询将正常返回。
batchSize int

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

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

collation array|object

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

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

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

comment mixed

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

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

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

exhaust bool

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

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

explain bool

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

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

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

hint string|array|object

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

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

let array|object

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

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

limit int

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

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

max array|object

特定索引的排他上限。

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

maxAwaitTimeMS int

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

maxScan int
警告

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

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

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

maxTimeMS int

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

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

min array|object

特定索引的包含下限。

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

modifiers array » 元运算符 修改查询的输出或行为。建议使用命名选项,弃用这些运算符。
noCursorTimeout bool 防止服务器在非活动期间(10 分钟)后使空闲游标超时。
oplogReplay bool

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

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

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

projection array|object

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

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

readConcern MongoDB\Driver\ReadConcern

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

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

returnKey bool

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

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

showRecordId bool

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

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

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

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

阻止游标由于插入的写入操作而多次返回同一个文档。

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

sort array|object

用于对结果进行排序的排序规范。

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

tailable bool 为带帽集合返回可尾部追溯的游标。

错误/异常

变更日志

版本 描述
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://localhost:27017');
$readPreference = new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_PRIMARY);
$cursor = $manager->executeQuery('databaseName.collectionName', $query, $readPreference);

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

?>

另请参见

添加注释

用户贡献的注释

此页面没有用户贡献的注释。
To Top