对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

Retrieve Data

在本指南中,您可以学习;了解如何使用MongoDB PHP库通过读取操作从MongoDB集合中检索数据。 您可以对集合调用MongoDB\Collection::find()MongoDB\Collection::findOne()方法,以检索与一设立条件匹配的文档。

本指南中的示例使用Atlas示例数据集sample_training数据库中的companies集合。 要从PHP应用程序访问权限此集合,请实例化一个连接到Atlas 集群的MongoDB\Client ,并将以下值分配给$collection变量:

$collection = $client->sample_training->companies;

要学习如何创建免费的MongoDB 部署并加载示例数据集,请参阅MongoDB 入门指南

MongoDB PHP库包含两种从集合中检索文档的方法:MongoDB\Collection::findOne()MongoDB\Collection::find()。这些方法采用 查询筛选条件 并返回一个或多个匹配的文档。查询筛选条件指定驱动程序用于检索查询中的文档的搜索条件。

提示

如需学习;了解有关查询筛选器的更多信息,请参阅“指定查询”指南。

要查找集合中的单个文档,请调用MongoDB\Collection::findOne()方法并传递查询过滤,其中指定要查找的文档条件。

findOne()方法返回arrayobjectnull值。 如果查询过滤与文档匹配,该方法将返回包含该文档的array|object实例。 返回类型取决于typeMap选项的值。 如果查询过滤与任何文档均不匹配,该方法将返回null

提示

要学习;了解有关findOne()选项(例如typeMap )的更多信息,请参阅本指南的“修改查找行为”部分。

如果查询过滤匹配多个文档,则findOne()方法会从检索到的结果中返回第一个匹配的文档。

以下示例使用findOne()方法查找name字段值为'LinkedIn'的第一个文档:

$document = $collection->findOne(['name' => 'LinkedIn']);
echo json_encode($document), PHP_EOL;
{"_id":{"$oid":"..."},"name":"LinkedIn","permalink":"linkedin","crunchbase_url":
"http:\/\/www.crunchbase.com\/company\/linkedin","homepage_url":"http:\/\/linkedin.com",
... }

提示

排序顺序

如果未指定排序条件,findOne() 方法将按自然顺序返回磁盘上的第一份文档。

要查找集合中的多个文档,请将查询筛选器传递给 MongoDB\Collection::find() 方法,其中指定要检索的文档条件。

以下示例使用find()方法查找founded_year字段值为1970的所有文档:

$results = $collection->find(['founded_year' => 1970]);

find()方法返回一个MongoDB\Driver\Cursor实例,您可以对其进行迭代以查看匹配的文档。 游标是一种机制,允许应用程序迭代数据库结果,同时在给定时间仅在内存中保存其中的子集。 当find()方法返回大量文档时,游标非常有用。

您可以使用foreach循环遍历游标中的文档,如以下示例所示:

foreach ($results as $doc) {
echo json_encode($doc), PHP_EOL;
}
{"_id":{"$oid":"..."},"name":"Mitsubishi Motors","permalink":"mitsubishi-motors",
"crunchbase_url":"http:\/\/www.crunchbase.com\/company\/mitsubishi-motors",
... }
{"_id":{"$oid":"..."},"name":"Western Digital","permalink":"western-digital",
"crunchbase_url":"http:\/\/www.crunchbase.com\/company\/western-digital",
... }
{"_id":{"$oid":"..."},"name":"Celarayn","permalink":"celarayn","crunchbase_url":
"http:\/\/www.crunchbase.com\/company\/celarayn",
... }

注意

查找所有文档

要查找集合中的所有文档,请将空筛选器传递给find()方法:

$cursor = $collection->find([]);

您可以通过将指定选项值的大量作为参数传递来修改MongoDB\Collection::find()MongoDB\Collection::findOne()方法的行为。 下表描述了您可以在大量中设立的一些选项:

选项
说明

batchSize

查询结果中返回的每个批处理中的最大文档数。默认下,find 命令的初始批处理大小为101 个文档,后续每个批处理的最大大小为16 兆字节 (MiB)。此选项可以实施小于16 MiB 的限制,但不能执行大于 MiB 的限制。如果将batchSize 设立为导致批量大于16 MiB 的限制,则此选项无效。类型:
integer

collation

用于操作的排序规则。默认值为为集合指定的排序规则。要学习;了解更多信息,请参阅本页的排序规则部分。类型:
array|object

comment


要附加到操作的注释。类型:任何BSON类型

cursorType

用于操作的游标类型。默认值为MongoDB\Operation\Find::NON_TAILABLE 。类型:
MongoDB\Operation\Find

limit


该操作可以返回的最大文档数。类型:integer

skip

返回结果之前要跳过的文档数。类型:
integer

sort

操作返回匹配文档的顺序。类型:
array|object

typeMap

应用游标的类型映射,决定如何将BSON文档转换为PHP值。默认值为集合的类型映射。类型:
array

以下示例使用find()方法查找number_of_employees字段值为1000的所有文档。 该示例使用limit选项返回最多5结果:

$results = $collection->find(
['number_of_employees' => 1000],
['limit' => 5],
);
foreach ($results as $doc) {
echo json_encode($doc), PHP_EOL;
}

有关选项的完整列表,请参阅findOne()find()参数的API文档。

要为操作指定排序规则,请传递 $options大量参数,该参数将 collation 选项设置为操作方法。将 collation 选项分配给配置排序规则规则的大量。

下表描述了可以设立以配置排序规则的字段:

字段
说明

locale

(必需)指定 Unicode(ICU)区域设置设置的国际组件。有关支持的区域设置列表,请参阅MongoDB Server手册中的排序规则区域设置和默认参数。数据类型:

string

caseLevel

(可选)指定是否包括大小写比较。当设立为

true时,比较行为取决于strength 字段的值:

strength1


- 如果strength 为 ,2
PHP库将比较基本字符和大小写。

— 如果 为 ,则PHP库会比较基本字符、变音符号、其他从节点(secondary nodestrength

falsefrom replica set)差异和大小写。 — 如果 为任何其他值,则忽略此字段。当设立为 时, PHP库不包括强度级别12

的大小写比较。数据类型:bool
默认值:false

caseFirst

(可选)指定三级比较期间大小写差异的排序顺序。数据类型:

string
默认值:"off"

strength

(可选)指定要执行的比较级别,如 ICU 文档中所定义。数据类型:

int
默认值:3

numericOrdering

(可选)指定驾驶员是否将数字字符串作为数字进行比较。如果设立为

true,则PHP库将数字字符串作为数字进行比较。示例,在比较字符串“”和“”时,该库使用字符串的数值并将“”视为大于“”。如果设立为10 2102

false102102

,则PHP库将数字字符串作为字符串进行比较。示例,在比较字符串“”和“”时,该库一次比较一个字符,并将“”视为小于“”。有关更多信息,请参阅MongoDB Server手册中的排序规则限制。数据类型:

bool
默认值:false

alternate

(可选)指定库是否将空格和标点符号视为基本字符以进行比较。数据类型:

string
默认值:"non-ignorable"

maxVariable

(可选)指定当 alternate字段设立为"shifted" 时库认为可忽略的字符。数据类型:

string
默认值:"punct"

backwards

(可选)指定包含变音符号的字符串是否从后往前排序。数据类型:

bool
默认值:false

要学习;了解有关排序规则和每个字段可能值的更多信息,请参阅MongoDB Server手册中的排序规则条目。

如需学习;了解有关查询筛选器的更多信息,请参阅“指定查询”指南。

要进一步了解本指南所讨论的任何方法,请参阅以下 API 文档: