文档菜单
文档首页
/ / /
PHP库手册
/

检索数据

本页内容

  • 概述
  • 示例数据
  • 查找文档
  • 查找单个文档
  • 查找多个文档
  • 修改查找行为
  • 附加信息
  • API文档

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

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

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

要了解如何创建免费的MongoDB Atlas集群并加载示例数据集,请参阅使用Atlas入门指南。

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
每批返回的文档数量。默认值为 101
类型: 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 文档。

要了解更多关于查询过滤器的信息,请参阅指定查询指南。

要查看使用MongoDB PHP库检索文档的代码示例,请参阅从MongoDB读取数据

要了解更多关于本指南中讨论的任何方法,请参阅以下API文档

返回

读取数据