使用索引
概述
在此指南中,您可以学习如何使用 C++ 驱动程序中的 索引。索引可以提高查询效率并为查询和存储文档添加额外的功能。
没有索引,MongoDB必须扫描集合中的每个文档以找到匹配每个查询的文档。如果查询存在合适的索引,MongoDB可以使用该索引来限制必须检查的文档,并提高潜在查询性能。
运营注意事项
为了提高查询性能,在应用查询和返回排序结果时经常出现的字段上建立索引。每个添加的索引在活动时都会消耗磁盘空间和内存,因此我们建议您跟踪索引内存和磁盘使用情况,以进行容量规划。此外,当写操作更新索引字段时,MongoDB也会更新任何相关索引。
由于MongoDB支持动态模式,应用程序可以查询预先不知道名称或任意的字段。MongoDB 4.2引入了通配索引以帮助支持这些查询。通配索引不是为了替代基于工作负载的索引规划。
有关设计您的数据模型和选择适合您应用程序的索引的更多信息,请参阅MongoDB服务器手册中的数据建模和索引指南。
示例数据
本指南中的示例使用的是movies
集合,位于sample_mflix
数据库中,该数据库来自Atlas示例数据集。要从您的C++应用程序访问此集合,请创建一个连接到Atlas集群的mongocxx::client
实例,并将以下值分配给您的db
和collection
变量
auto db = client["sample_mflix"]; auto collection = db["movies"];
有关创建免费MongoDB Atlas集群并加载数据集的说明,请参阅Atlas入门指南。
创建索引
MongoDB支持多种索引类型,以帮助查询您的数据。以下页面描述了不同的索引类型,并提供了创建每种类型索引的示例代码。
删除索引
您可以删除除默认的_id字段上的唯一索引之外的所有未使用索引。
以下部分提供了示例,说明如何从一个集合中删除一个或多个索引。
删除单个索引
要从集合中删除单个索引,调用drop_one()
方法并传入要删除的索引名称或索引实例。
以下示例从movies
集合中删除名为"title_1"
的索引。
collection.indexes().drop_one("title_1");
注意
您不能从复合文本索引中删除单个字段。必须删除整个索引并创建一个新的索引来更新索引字段。
删除所有索引
从MongoDB 4.2版本开始,您可以通过在集合的索引视图中调用 drop_all()
方法来删除所有索引
collection.indexes().drop_all();
对于MongoDB的早期版本,将 "*"
作为参数传递给集合的索引视图中的 drop_one()
调用
collection.indexes().drop_one("*");
更多信息
要了解更多关于MongoDB中索引的信息,请参阅MongoDB服务器手册中的 索引 指南。
API文档
要了解更多关于本指南中讨论的方法或类型的信息,请参阅以下API文档