MongoDB – 多键索引
索引是一种特殊的数据结构,用于存储与文档相关的一些信息,以便 MongoDB 可以轻松找到正确的数据文件。它们还存储特定字段或字段集的值,按索引中指定的字段值排序。 MongoDB 允许通过为数组中的每个元素创建索引键来索引保存数组值的字段,这种类型的索引称为多键索引。它支持对数组字段的高效查询。它可以在包含标量值(如字符串、数字等)和嵌套文档的数组上构造。
如何创建多键索引?
在 MongoDB 中,我们可以使用createIndex()方法创建多键索引
句法:
db.Collection_name.createIndex({filed_name: 1/ -1})
要点:
- 如果索引字段是数组,那么 MongoDB 将自动为该字段创建多键索引。
- 不允许将多键索引指定为 Sherd 键索引。
- 在 MongoDB 中,散列索引不是多键索引。
- 多键索引不支持 $expr运算符。
- 在 MongoDB 中,如果过滤器查询为整个数组指定了精确匹配,则 MongoDB 会扫描多键索引以查找 quarry 数组的第一个元素。在扫描多键索引以查找 quarry 数组的第一个元素后,MongoDB 检索那些包含第一个元素的文档,然后过滤它们以查找其数组与给定查询匹配的文档。而不是扫描多键索引来查找整个数组。
例子:
在以下示例中,我们正在使用:
Database: gfg
Collections: student
Document: Three documents contains the details of the students
- 创建多键索引:
现在我们借助字段语言的 createIndex() 方法创建多索引:
db.student.createIndex({language:1})
建立索引后,我们将使用 getIndexes() 方法检查索引:
- 使用嵌入的文档索引数组:
您可以在包含嵌套文档/对象的数组字段上创建多键索引。
db.student.createIndex({"details.age":1, "details.branch":1})
在这里,我们在“details.age”和“details.branch”字段上创建多键索引。
建立索引后,我们将使用 getIndexes() 方法检查索引:
限制:
- 创建复合多键索引时,每个索引文档必须最多包含一个索引字段,其值为数组。
- 如果文档的多个要索引的字段是数组,则不允许创建复合多键索引。
- 当复合多键索引已经存在时,则不允许插入会破坏限制的文档。
- 当一个字段是一个文档数组时,你可以索引一个嵌入的文档来创建一个复合索引,但最多一个索引字段可以是一个数组。