对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

创建索引以支持查询

当索引包含查询扫描的所有字段时,它就支持该查询。该查询扫描的将会是索引而不是集合。创建支持查询的索引可大幅提高查询性能。

本文档介绍了创建支持查询的索引的各种策略。

如果只查询某集合中的一个键,则只需为该集合创建一个单键索引。例如,您可对 product 集合中的 category 创建索引:

db.products.createIndex( { "category": 1 } )

如果您有时仅查询一个键,而有时又会对该键与另一键的组合进行查询,则创建复合索引比创建单键索引更为高效。MongoDB 会将复合索引用于这两个查询。例如,您可对 categoryitem 创建索引。

db.products.createIndex( { "category": 1, "item": 1 } )

这样您就有两种选择。您可以仅查询 category,也可以查询 categoryitem。多个字段上的单个复合索引可以支持搜索这些字段的“前缀”子集的所有查询。

例子

某个集合的如下索引:

{ x: 1, y: 1, z: 1 }

可支持以下索引支持的查询:

{ x: 1 }
{ x: 1, y: 1 }

某些情况下,前缀索引可能会提供更优的查询性能:例如,如果 z 为大型数组。

{ x: 1, y: 1, z: 1 } 索引还可以支持与以下索引相同的许多查询:

{ x: 1, z: 1 }

此外,{ x: 1, z: 1 } 还有其他用途。给定以下查询:

db.collection.find( { x: 5 } ).sort( { z: 1} )

{ x: 1, z: 1 } 索引同时支持查询和排序操作,而 { x: 1, y: 1, z: 1 } 索引仅支持查询。有关排序的更多信息,请参阅使用索引对查询结果排序。

对于托管在 MongoDB Atlas 上的数据,您可以通过 Atlas Search 索引来支持全文搜索。如需了解更多信息,请参阅创建 Atlas Search 索引

对于自托管(非 Atlas)部署, MongoDB提供了 text索引类型,支持在集合中搜索string内容。 要学习;了解有关自管理文本索引的更多信息,请参阅自管理部署上的文本索引。

要使用索引进行字符串比较,操作还必须指定相同的排序规则。换言之,如果一个操作对索引字段进行字符串比较,但又设定了与索引字段不同的排序规则,那么这个设有排序规则的索引将无法支持该操作。

警告

对于不带排序规则的索引,支持排序规则的索引键可能大于索引键,因为配置排序规则的索引使用 ICU 排序规则键来实现排序顺序。