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

使用索引优化查询

在此页面上

  • Overview
  • 示例应用程序
  • 单字段索引
  • 复合索引
  • Multikey Index
  • 地理空间索引
  • 唯一索引
  • 通配符索引(Wildcard Index)
  • 聚集索引
  • Text Index
  • 列出索引
  • 删除索引
  • Atlas Search 索引管理
  • 创建Atlas Search索引
  • 搜索索引列表
  • 更新搜索索引
  • 删除Atlas Search索引

在此页面上,您可以查看可复制的代码示例,这些示例展示了如何使用MongoDB PHP库管理不同类型的索引。

提示

要学习;了解有关使用索引的更多信息,请参阅索引注意事项和管理指南。 要学习;了解有关此页面上显示的任何索引的更多信息,请参阅每个部分中提供的链接。

要使用本页中的示例,请将代码示例复制到示例应用程序或您自己的应用程序中。 确保设立MONGODB_URI 环境变量设置为 部署的连接string MongoDB,并将<database><collection> 占位符替换为目标命名空间的值。

您可以使用以下示例应用程序来测试本页上的代码示例。 要使用示例应用程序,请执行以下步骤:

  1. 确保您已在项目中安装MongoDB PHP库。 要学习;了解有关安装MongoDB PHP库的更多信息,请参阅下载和安装指南。

  2. 复制以下代码并将其粘贴到新的.php文件中。

  3. 从此页面复制代码示例,并将其粘贴到文件中的指定行。

1<?php
2
3require __DIR__ . '/../vendor/autoload.php';
4
5$uri = getenv('MONGODB_URI') ?: throw new RuntimeException('Set the MONGODB_URI variable to your Atlas URI that connects to the sample dataset');
6$client = new MongoDB\Client($uri);
7
8$collection = $client->selectCollection('<database>', '<collection>');
9
10// Start example code here
11
12// End example code here

一些示例使用toJSON()函数将变更事件(属于BSON文档)表示为 扩展JSON。 要使用此函数,请将以下代码粘贴到应用程序文件:

function toJSON(object $document): string
{
return MongoDB\BSON\Document::fromPHP($document)->toRelaxedExtendedJSON();
}

以下示例在指定字段上创建一个升序索引:

$indexName = $collection->createIndex(['<field name>' => 1]);

要学习;了解有关单字段索引的更多信息,请参阅单字段索引指南。

以下示例在指定字段上创建两个升序索引的复合索引:

$indexName = $collection->createIndex(
['<field name 1>' => 1, '<field name 2>' => 1]
);

要了解有关复合索引的更多信息,请参阅复合索引指南。

以下示例在指定的数组值字段上创建一个升序多键索引:

$indexName = $collection->createIndex(['<array field name>' => 1]);

要了解有关多键索引的更多信息,请参阅多键索引指南。

以下示例在具有GeoJSON对象值的指定字段上创建2 dsphere索引:

$indexName = $collection->createIndex(
[ '<GeoJSON object field>' => '2dsphere']
);

要学习;了解有关GeoJSON数据类型的更多信息,请参阅MongoDB Server手册中的GeoJSON对象

以下示例在指定字段上创建一个升序唯一索引:

$indexName = $collection->createIndex(['<field name>' => 1], ['unique' => true]);

以下示例将在集合上创建升序通配符索引:

$indexName = $collection->createIndex(['$**' => 1]);

在指定数据库中创建新集合时,可以创建集群化索引。 以下示例在_id字段上创建一个具有升序集群索引的新集合:

$options = [
'clusteredIndex' => [
'key' => ['_id' => 1],
'unique' => true
]
];
$database->createCollection('<collection name>', $options);

以下示例在指定string字段上创建文本索引:

$indexName = $collection->createIndex(['<field name>' => 'text']);

以下示例打印指定集合中的索引列表:

foreach ($collection->listIndexes() as $indexInfo) {
echo $indexInfo;
}

以下示例删除具有指定名称的索引:

$collection->dropIndex('<index name>');

要学习;了解有关删除索引的更多信息,请参阅《索引注意事项和管理》指南中的“删除索引”。

以下部分包含描述如何管理Atlas Search索引的代码示例。

注意

Atlas Search索引管理是异步的

MongoDB PHP库异步管理Atlas Search索引。 以下部分中描述的库方法会立即返回服务器响应,但对搜索索引的更改会在背景进行,可能要稍后一段时间才能完成。

要学习;了解有关Atlas Search索引的更多信息,请参阅Atlas Search索引指南。

以下示例在指定字段上创建Atlas Search索引:

$indexName = $collection->createSearchIndex(
['mappings' => ['dynamic' => true]],
['name' => '<Search index name>']
);

以下示例将打印指定集合中的Atlas Search索引列表:

foreach ($collection->listSearchIndexes() as $indexInfo) {
echo toJSON($indexInfo), PHP_EOL;
}

以下示例使用指定的新索引定义更新现有Atlas Search索引:

$collection->updateSearchIndex(
'<Search index name>',
['mappings' => [
'dynamic' => false,
'fields' => [
'<string field name>' => [
'type' => 'string',
'analyzer' => 'lucene.standard'
]
]
]]
);

以下示例删除具有指定名称的Atlas Search索引:

$collection->dropSearchIndex('<Search index name>');

后退

数据聚合