单字段索引

在本页面

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

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

``分数''字段上的索引图(升序)。

在单个字段上创建升序索引

考虑一个名为records的集合,其中包含类似于以下示例文档的文档:

{
  "_id": ObjectId("570c04a4ad233577f97dc459"),
  "score": 1034,
  "location": { state: "NY", city: "New York" }
}

以下操作在records集合的score字段上创建一个升序索引:

db.records.createIndex( { score: 1 } )

索引规范中该字段的值描述了该字段的索引类型。例如,值1指定一个索引,该索引以升序排序。值-1指定一个索引,该索引以降序排列。有关其他索引类型,请参见index types

创建的索引将支持在字段score上选择的查询,例如:

db.records.find( { score: 2 } )
db.records.find( { score: { $gt: 10 } } )

在嵌入式字段上创建索引

您可以在嵌入式文档中的字段上创建索引,就像可以在文档中的顶级字段上构建索引一样。嵌入字段上的索引与嵌入式文档索引不同,后者包含索引中嵌入文档的最大内容,最大为index size。相反,嵌入式字段上的索引使您可以使用“点符号”对内嵌文档进行内省。

考虑一个名为records的集合,其中包含类似于以下示例文档的文档:

{
  "_id": ObjectId("570c04a4ad233577f97dc459"),
  "score": 1034,
  "location": { state: "NY", city: "New York" }
}

以下操作在location.state字段上创建索引:

db.records.createIndex( { "location.state": 1 } )

创建的索引将支持在字段location.state上选择的查询,例如:

db.records.find( { "location.state": "CA" } )
db.records.find( { "location.city": "Albany", "location.state": "NY" } )

在嵌入式文档上创建索引

您还可以在整个嵌入式文档上创建索引。

考虑一个名为records的集合,其中包含类似于以下示例文档的文档:

{
  "_id": ObjectId("570c04a4ad233577f97dc459"),
  "score": 1034,
  "location": { state: "NY", city: "New York" }
}

location字段是嵌入式文档,包含嵌入式字段citystate。以下命令总体上在location字段上创建索引:

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

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

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

Note

尽管查询可以使用索引,但是结果集不包括上面的示例文档。当对嵌入式文档执行相等匹配时,site 订单很重要,并且嵌入式文档必须完全匹配。有关查询嵌入式文档的更多信息,请参见查询嵌入式文档

Additional Considerations

如果您的集合包含大量数据,并且您的应用程序需要能够在构建索引的同时访问数据,请考虑在后台构建索引,如Background Construction中所述。

有关索引构建过程的更多信息,请参见填充集合上的索引构建操作,包括在副本集和分片群集上构建索引部分。

一些驱动程序可能使用NumberLong(1)而不是1作为规范来指定索引。这对结果索引没有任何影响。