复合索引
Overview
复合索引包含对集合文档中多个字段的引用,从而提高查询和排序性能。
创建复合索引时,必须指定以下内容:
要在其上创建索引的字段
每个字段的排序顺序(升序或降序)
样本数据
本指南中的示例使用Atlas示例数据集的sample_mflix
数据库中的 movies
集合。 要学习;了解如何创建免费的MongoDB Atlas 群集并加载示例数据集,请参阅Atlas入门指南。
以下Kotlin数据类对此集合中的文档进行建模:
data class Movie( val id: ObjectId, val title: String? = "", val type: String? = "", val genres: List<String>? = null, val cast: List<String>? = null, val plot: String? = "", )
创建复合索引
以下示例对type
和genre
字段创建复合索引,这两个字段均按升序编入索引:
collection.createIndex(Indexes.ascending(Movie::type.name, Movie::genres.name))
以下是使用在前面的代码示例中创建的索引的查询示例:
val filter = and( eq(Movie::type.name, "movie"), `in`(Movie::genres.name, "Drama") ) val sort = Sorts.ascending(Movie::type.name, Movie::genres.name) val results = collection.find(filter).sort(sort) results.forEach { result -> println(result) }
Movie(id=573a1392f29313caabcda755, title=China Seas, type=movie, genres=[Action, Drama, Adventure], ...) Movie(id=573a1392f29313caabcd9ca6, title=Scarface, type=movie, genres=[Action, Crime, Drama], ... ) Movie(id=573a1392f29313caabcdb258, title=The Hurricane, type=movie, genres=[Action, Drama, Romance], ...) Movie(id=573a1391f29313caabcd820b, title=Beau Geste, type=movie, genres=[Action, Adventure, Drama], ...) ...
更多信息
要学习;了解有关复合索引的更多信息,请参阅MongoDB Server手册中的复合索引。
要学习;了解使用复合索引的有效索引策略,请参阅MongoDB Server手册中的 ESR 规则。
API 文档
要进一步了解本指南所讨论的任何方法,请参阅以下 API 文档: