单字段索引
MongoDB为 文档 集合 中任何字段的索引提供全面支持。默认,所有集合在_id字段上都有一个索引,应用程序和用户可以添加其他索引来支持重要的查询和操作。
本文档描述了单个字段的升序/降序索引。
兼容性
您可以对 MongoDB Atlas 中托管的部署使用单字段索引。
要了解有关为 MongoDB Atlas 中托管的部署管理索引的更多信息,请参阅创建、查看、删除和隐藏索引。
创建单个字段的升序索引
考虑包含以下示例文档的 schools
collection:
db.schools.insertOne( { "_id": ObjectId("570c04a4ad233577f97dc459"), "studentsEnrolled": 1034, "location": { state: "NY", city: "New York" } } )
studentsEnrolled
schools
以下操作在collection的字段上创建一个升序索引:
db.schools.createIndex( { studentsEnrolled: 1 } )
创建的索引支持选择字段studentsEnrolled
的查询,如下所示:
db.schools.find( { studentsEnrolled: 1034 } ) db.schools.find( { studentsEnrolled: { $gt: 500 } } )
对嵌入字段创建索引
您可以在嵌入式文档中的字段上创建索引,就像为文档中的顶级字段创建索引一样。 嵌入式字段上的索引与嵌入式文档上的索引不同,后者包括索引中嵌入式文档最大索引大小的完整内容。 相反,嵌入式字段上的索引允许您使用“点表示法”来内省嵌入式文档。
考虑一个名为records
的集合,其中包含类似于以下示例文档的文档:
{ "_id": ObjectId("570c04a4ad233577f97dc459"), "studentsEnrolled": 1034, "location": { state: "NY", city: "New York" } }
以下操作在location.state
字段上创建索引:
db.schools.createIndex( { "location.state": 1 } )
创建的索引将支持选择字段location.state
的查询,如下所示:
db.schools.find( { "location.state": "CA" } ) db.schools.find( { "location.city": "Albany", "location.state": "NY" } )
对嵌入式文档创建索引
您还可以对整个嵌入式文档创建索引。
在嵌入式文档上创建索引时,仅指定整个嵌入式文档的查询使用该索引。对文档中的特定字段的查询不使用该索引。
考虑一个名为schools
的集合,其中包含类似于以下示例文档的文档:
{ "_id": ObjectId("570c04a4ad233577f97dc459"), "studentsEnrolled": 1034, "location": { state: "NY", city: "New York" } }
location
字段是嵌入式文档,包含嵌入式字段city
和state
。以下命令将在整个location
字段上创建索引:
db.schools.createIndex( { location: 1 } )
以下查询可以使用location
字段上的索引:
db.schools.find( { location: { city: "New York", state: "NY" } } )
注意
尽管查询可以使用索引,但结果集不包括上述示例文档。 对嵌入式文档执行等值匹配时,字段顺序很重要,嵌入式文档必须完全匹配。 有关查询嵌入式文档的更多信息,请参阅查询嵌入式文档。
其他注意事项
在索引构建期间,应用程序可能会遇到性能下降或要索引集合的读/写权限受限的问题。
有关索引构建过程的更多信息,请参阅填充collection上的索引构建,特别是复制环境中的索引构建部分。
某些驱动程序使用NumberLong(1)
而不是1
来指定索引顺序。 生成的索引是相同的。