Overview
在本指南中,您可以学习;了解如何使用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()方法返回array 、 object或null值。 如果查询过滤与文档匹配,该方法将返回包含该文档的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", ... }
查找多个文档
要查找集合中的多个文档,请将查询筛选器传递给 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()方法的行为。 下表描述了您可以在大量中设立的一些选项:
选项 | 说明 |
|---|---|
| 查询结果中返回的每个批处理中的最大文档数。默认下, |
| |
|
|
| 用于操作的游标类型。默认值为 |
|
|
| 返回结果之前要跳过的文档数。类型: |
| 操作返回匹配文档的顺序。类型: |
| 应用游标的类型映射,决定如何将BSON文档转换为PHP值。默认值为集合的类型映射。类型: |
以下示例使用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 选项分配给配置排序规则规则的大量。
下表描述了可以设立以配置排序规则的字段:
字段 | 说明 |
|---|---|
| |
| (可选)指定是否包括大小写比较。当设立为 |
| (可选)指定三级比较期间大小写差异的排序顺序。数据类型: |
| (可选)指定要执行的比较级别,如 ICU 文档中所定义。数据类型: |
| |
| (可选)指定库是否将空格和标点符号视为基本字符以进行比较。数据类型: |
| (可选)指定当 |
| (可选)指定包含变音符号的字符串是否从后往前排序。数据类型: |
要学习;了解有关排序规则和每个字段可能值的更多信息,请参阅MongoDB Server手册中的排序规则条目。
更多信息
如需学习;了解有关查询筛选器的更多信息,请参阅“指定查询”指南。
API 文档
要进一步了解本指南所讨论的任何方法,请参阅以下 API 文档: