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

指定查询

在本页中

  • 概述
  • 示例数据
  • 精确匹配
  • 比较运算符
  • 逻辑运算符
  • 数组运算符
  • 元素运算符
  • 评估运算符
  • 附加信息
  • API文档

本指南中,您可以学习如何使用MongoDB PHP库指定查询。

您可以通过创建一个查询过滤器来细化查询返回的文档集合。查询过滤器是一个表达式,用于指定MongoDB在读写操作中匹配文档的搜索条件。在查询过滤器中,您可以指示驱动程序搜索与查询完全匹配的文档,或者您可以组合查询过滤器以表达更复杂的匹配条件。

本指南中的示例在fruits 集合上运行操作,该集合包含代表水果的文档。以下代码示例显示了如何创建数据库和集合,然后插入示例文档到您的集合中

$uri = '<connection string>';
$client = new Client($uri);
$collection = $client->db->fruits;
// Inserts documents representing fruits
$fruits = [
[
'_id' => 1,
'name' => 'apples',
'qty' => 5,
'rating' => 3,
'color' => 'red',
'type' => ['fuji', 'honeycrisp']
],
[
'_id' => 2,
'name' => 'bananas',
'qty' => 7,
'rating' => 4,
'color' => 'yellow',
'type' => ['cavendish']
],
[
'_id' => 3,
'name' => 'oranges',
'qty' => 6,
'rating' => 2,
'type' => ['naval', 'mandarin']
],
[
'_id' => 4,
'name' => 'pineapples',
'qty' => 3,
'rating' => 5,
'color' => 'yellow'
]
];
$result = $collection->insertMany($fruits);

直接值查询返回与查询筛选器精确匹配的文档。

以下示例将查询筛选器作为参数传递给 MongoDB\Collection::find() 方法。该代码返回所有 color 字段值为 'yellow' 的文档

$cursor = $collection->find(['color' => 'yellow']);
foreach ($cursor as $doc) {
echo json_encode($doc), PHP_EOL;
}
{"_id":2,"name":"bananas","qty":7,"rating":4,"color":"yellow","type":["cavendish"]}
{"_id":4,"name":"pineapples","qty":3,"rating":5,"color":"yellow"}

提示

查找所有文档

要查找集合中的所有文档,请调用 find() 方法并传递一个空查询筛选器。以下示例查找集合中的所有文档

$cursor = $collection->find([]);
foreach ($cursor as $doc) {
echo json_encode($doc), PHP_EOL;
}

比较运算符将文档字段值与查询筛选器中指定的值进行比较。以下列表定义了常见的比较运算符

  • $gt:大于

  • $lte:小于或等于

  • $ne:不等于

要查看比较运算符的完整列表,请参阅比较查询运算符指南 MongoDB 服务器手册。

以下示例在查询筛选器中指定比较运算符作为参数传递给 MongoDB\Collection::find() 方法。该代码返回所有 rating 字段值大于 2 的文档

$cursor = $collection->find(['rating' => ['$gt' => 2]]);
foreach ($cursor as $doc) {
echo json_encode($doc), PHP_EOL;
}
{"_id":1,"name":"apples","qty":5,"rating":3,"color":"red","type":["fuji","honeycrisp"]}
{"_id":2,"name":"bananas","qty":7,"rating":4,"color":"yellow","type":["cavendish"]}
{"_id":4,"name":"pineapples","qty":3,"rating":5,"color":"yellow"}

逻辑运算符通过将逻辑应用于两个或多个表达式集的结果来匹配文档。以下列表描述了每个逻辑运算符

  • $and:返回所有满足所有子句条件的文档

  • $or:返回所有满足任一子句条件的文档

  • $nor:返回所有不满足任何子句条件的文档

  • $not:返回所有不满足表达式的文档

有关逻辑运算符的更多信息,请参阅MongoDB服务器手册中的逻辑查询运算符指南。

以下示例在查询过滤器中指定逻辑运算符,作为MongoDB\Collection::find()方法的参数。该代码返回所有qty字段值大于5color字段值为'yellow'的文档

$cursor = $collection->find([
'$or' => [
['qty' => ['$gt' => 5]],
['color' => 'yellow']
]
]);
foreach ($cursor as $doc) {
echo json_encode($doc), PHP_EOL;
}
{"_id":2,"name":"bananas","qty":7,"rating":4,"color":"yellow","type":["cavendish"]}
{"_id":3,"name":"oranges","qty":6,"rating":2,"type":["naval","mandarin"]}
{"_id":4,"name":"pineapples","qty":3,"rating":5,"color":"yellow"}

数组运算符根据数组字段中元素的值或数量来匹配文档。以下列表描述了可用的数组运算符

  • $all:返回包含查询中所有元素的数组文档

  • $elemMatch:如果数组字段中的元素满足查询中的所有条件,则返回文档

  • $size:返回所有具有指定大小的数组文档

有关数组运算符的更多信息,请参阅MongoDB服务器手册中的数组查询运算符指南。

以下示例在查询过滤器中指定了一个数组运算符作为 MongoDB\Collection::find() 方法的参数。该代码返回所有 type 数组字段包含 2 个元素的文档。

$cursor = $collection->find(['type' => ['$size' => 2]]);
foreach ($cursor as $doc) {
echo json_encode($doc), PHP_EOL;
}
{"_id":1,"name":"apples","qty":5,"rating":3,"color":"red","type":["fuji","honeycrisp"]}
{"_id":3,"name":"oranges","qty":6,"rating":2,"type":["naval","mandarin"]}

元素运算符根据字段的存在的或类型来查询数据。

要了解更多关于元素运算符的信息,请参阅 MongoDB 服务器手册中的元素查询运算符指南。

以下示例在查询过滤器中指定了一个元素运算符作为 MongoDB\Collection::find() 方法的参数。该代码返回所有具有 color 字段的文档。

$cursor = $collection->find(['color' => ['$exists' => true]]);
foreach ($cursor as $doc) {
echo json_encode($doc), PHP_EOL;
}
{"_id":1,"name":"apples","qty":5,"rating":3,"color":"red","type":["fuji","honeycrisp"]}
{"_id":2,"name":"bananas","qty":7,"rating":4,"color":"yellow","type":["cavendish"]}
{"_id":4,"name":"pineapples","qty":3,"rating":5,"color":"yellow"}

评估运算符基于对单个字段或整个集合文档的评估返回数据。

以下列表描述了一些常见的评估运算符:

  • $text:对文档执行文本搜索

  • $regex:返回与指定的正则表达式匹配的文档

  • $mod:对字段的值执行取模运算,并返回余数为指定值的文档

要查看评估运算符的完整列表,请参阅 MongoDB 服务器手册中的评估查询运算符指南。

以下示例在查询过滤器中指定了一个评估运算符作为 MongoDB\Collection::find() 方法的参数。该代码使用正则表达式返回所有 name 字段值至少包含两个连续的 'p' 字符的文档。

$cursor = $collection->find(['name' => ['$regex' => 'p{2,}']]);
foreach ($cursor as $doc) {
echo json_encode($doc), PHP_EOL;
}
{"_id":1,"name":"apples","qty":5,"rating":3,"color":"red","type":["fuji","honeycrisp"]}
{"_id":4,"name":"pineapples","qty":3,"rating":5,"color":"yellow"}

要了解更多关于查询文档的信息,请参阅 MongoDB 服务器手册中的查询文档指南。

要了解更多关于使用 MongoDB PHP 库检索文档的信息,请参阅检索数据指南。

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

返回

指定要返回的文档