文档菜单
文档首页
/
MongoDB 手册
/ / /

在嵌入式文档上创建索引

本页内容

  • 关于此任务
  • 开始之前
  • 步骤
  • 结果
  • 了解更多

您可以为嵌入式文档创建索引。但是,只有指定整个嵌入式文档的查询才使用索引。对文档中特定字段的查询不使用索引。

  • 要使用嵌入文档的索引,您的查询必须指定整个嵌入文档。如果您的模式模型发生变化,您在索引文档中添加或删除字段,这可能会导致意外的行为。

  • 当您查询嵌入文档时,查询中指定字段的顺序很重要。您查询的嵌入文档和返回的文档必须完全匹配。要查看嵌入文档查询的示例,请参阅嵌入/嵌套文档的查询.

  • 在您对嵌入文档创建索引之前,考虑是否应该在该文档中索引特定字段,或者使用通配符索引来索引文档的所有子字段。

创建一个students 集合,包含以下文档

db.students.insertMany( [
{
"name": "Alice",
"gpa": 3.6,
"location": { city: "Sacramento", state: "California" }
},
{
"name": "Bob",
"gpa": 3.2,
"location": { city: "Albany", state: "New York" }
}
] )

location 字段上创建索引

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

以下查询使用了 location 字段的索引

db.students.find( { location: { city: "Sacramento", state: "California" } } )

以下查询 没有 使用 location 字段的索引,因为它们在嵌入文档的特定字段上进行了查询

db.students.find( { "location.city": "Sacramento" } )
db.students.find( { "location.state": "New York" } )

为了使点符号查询能够使用索引,您必须在您正在查询的特定嵌入字段上创建索引,而不是整个嵌入对象。例如,请参阅 点符号查询,以及 在嵌入字段上创建索引

以下查询没有返回结果,因为查询谓词中的嵌入字段指定的顺序与文档中出现的顺序不同

db.students.find( { location: { state: "California", city: "Sacramento" } } )

返回

创建

© . This site is unofficial and not affiliated with MongoDB, Inc.