Docs 菜单
Docs 主页
/ / /
PHP 库手册
/

Retrieve Data

在此页面上

  • Overview
  • 样本数据
  • 查找文档
  • 查找一个文档
  • 查找多个文档
  • 修改查找行为
  • 更多信息
  • API 文档

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

本指南中的示例使用 Atlas示例数据集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

The number of documents to return per batch. The default value is 101.
Type: integer

collation

The collation to use for the operation. The default value is the collation specified for the collection.
Type: array|object

comment

The comment to attach to the operation.
Type: any BSON type

cursorType

The type of cursor to use for the operation. The default value is MongoDB\Operation\Find::NON_TAILABLE.
Type: MongoDB\Operation\Find

limit

The maximum number of documents the operation can return.
Type: integer

skip

The number of documents to skip before returning results.
Type: integer

sort

The order in which the operation returns matching documents.
Type: array|object

typeMap

The type map to apply to cursors, which determines how BSON documents are converted to PHP values. The default value is the collection's type map.
Type: 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 文档:

后退

读取数据