使用索引优化查询
在此页面上
Overview
在此页面上,您可以查看可复制的代码示例,这些示例展示了如何使用MongoDB PHP库管理不同类型的索引。
提示
要学习;了解有关使用索引的更多信息,请参阅索引注意事项和管理指南。 要学习;了解有关此页面上显示的任何索引的更多信息,请参阅每个部分中提供的链接。
要使用本页中的示例,请将代码示例复制到示例应用程序或您自己的应用程序中。 确保设立MONGODB_URI
环境变量设置为 部署的连接string MongoDB,并将<database>
和<collection>
占位符替换为目标命名空间的值。
示例应用程序
您可以使用以下示例应用程序来测试本页上的代码示例。 要使用示例应用程序,请执行以下步骤:
确保您已在项目中安装MongoDB PHP库。 要学习;了解有关安装MongoDB PHP库的更多信息,请参阅下载和安装指南。
复制以下代码并将其粘贴到新的
.php
文件中。从此页面复制代码示例,并将其粘贴到文件中的指定行。
1 2 3 require __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] );
要了解有关复合索引的更多信息,请参阅复合索引指南。
Multikey Index
以下示例在指定的数组值字段上创建一个升序多键索引:
$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]);
通配符索引(Wildcard Index)
以下示例将在集合上创建升序通配符索引:
$indexName = $collection->createIndex(['$**' => 1]);
聚集索引
在指定数据库中创建新集合时,可以创建集群化索引。 以下示例在_id
字段上创建一个具有升序集群索引的新集合:
$options = [ 'clusteredIndex' => [ 'key' => ['_id' => 1], 'unique' => true ] ]; $database->createCollection('<collection name>', $options);
Text Index
以下示例在指定string字段上创建文本索引:
$indexName = $collection->createIndex(['<field name>' => 'text']);
列出索引
以下示例打印指定集合中的索引列表:
foreach ($collection->listIndexes() as $indexInfo) { echo $indexInfo; }
删除索引
以下示例删除具有指定名称的索引:
$collection->dropIndex('<index name>');
要学习;了解有关删除索引的更多信息,请参阅《索引注意事项和管理》指南中的“删除索引”。
Atlas Search 索引管理
以下部分包含描述如何管理Atlas Search索引的代码示例。
注意
Atlas Search索引管理是异步的
MongoDB PHP库异步管理Atlas Search索引。 以下部分中描述的库方法会立即返回服务器响应,但对搜索索引的更改会在背景进行,可能要稍后一段时间才能完成。
要学习;了解有关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索引
以下示例删除具有指定名称的Atlas Search索引:
$collection->dropSearchIndex('<Search index name>');