Docs 菜单
Docs 主页
/
MongoDB Manual
/

单字段索引

在此页面上

  • 兼容性
  • 创建单个字段的升序索引
  • 对嵌入字段创建索引
  • 对嵌入式文档创建索引
  • 其他注意事项

MongoDB为 文档 集合 中任何字段的索引提供全面支持。默认,所有集合在_id字段上都有一个索引,应用程序和用户可以添加其他索引来支持重要的查询和操作。

本文档描述了单个字段的升序/降序索引。

score 字段索引图(升序)。

您可以对 MongoDB Atlas 中托管的部署使用单字段索引。

要了解有关为 MongoDB Atlas 中托管的部署管理索引的更多信息,请参阅创建、查看、删除和隐藏索引

考虑包含以下示例文档的 schoolscollection:

db.schools.insertOne(
{
"_id": ObjectId("570c04a4ad233577f97dc459"),
"studentsEnrolled": 1034,
"location": { state: "NY", city: "New York" }
}
)

studentsEnrolledschools以下操作在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字段是嵌入式文档,包含嵌入式字段citystate 。以下命令将在整个location字段上创建索引:

db.schools.createIndex( { location: 1 } )

以下查询可以使用location字段上的索引:

db.schools.find( { location: { city: "New York", state: "NY" } } )

注意

尽管查询可以使用索引,但结果集不包括上述示例文档。 对嵌入式文档执行等值匹配时,字段顺序很重要,嵌入式文档必须完全匹配。 有关查询嵌入式文档的更多信息,请参阅查询嵌入式文档。

在索引构建期间,应用程序可能会遇到性能下降或要索引集合的读/写权限受限的问题。

有关索引构建过程的更多信息,请参阅填充collection上索引构建,特别是复制环境中的索引构建部分。

某些驱动程序使用NumberLong(1)而不是1来指定索引顺序。 生成的索引是相同的。

后退

索引