索引
索引能够实现高效地查询。没有索引,MongoDB 就必须扫描集合中的所有文档,才能找到匹配查询语句的文档。这种扫描毫无效率可言,需要处理大量的数据。
索引是一种特殊的数据结构,将一小块数据集保存为容易遍历的形式。索引能够存储某种特殊字段或字段集的值,并按照索引指定的方式将字段值进行排序。
ensureIndex() 方法
要想创建索引,需要使用 MongoDB 的 ensureIndex()
方法。
语法格式
ensureIndex()
方法的基本语法格式为:
>db.COLLECTION_NAME.ensureIndex({KEY:1})
这里的 key 是想创建索引的字段名称,1 代表按升序排列字段值。-1 代表按降序排列。
范例
>db.mycol.ensureIndex({"title":1})
>
可以为 ensureIndex()
方法传入多个字段,从而为多个字段创建索引。
>db.mycol.ensureIndex({"title":1,"description":-1})
>
ensureIndex()
方法也可以接受一些可选参数,如下所示:
参数 | 类型 | 描述 |
---|---|---|
background |
布尔值 | 在后台构建索引,从而不干扰数据库的其他活动。取值为 true 时,代表在后台构建索引。默认值为 false |
unique |
布尔值 | 创建一个唯一的索引,从而当索引键匹配了索引中一个已存在值时,集合不接受文档的插入。取值为 true 代表创建唯一性索引。默认值为 false 。 |
name |
字符串 | 索引名称。如果未指定,MongoDB 会结合索引字段名称和排序序号,生成一个索引名称。 |
dropDups |
布尔值 | 在可能有重复的字段内创建唯一性索引。MongoDB 只在某个键第一次出现时进行索引,去除该键后续出现时的所有文档。 |
sparse |
布尔值 | 如果为 true,索引只引用带有指定字段的文档。这些索引占据的空间较小,但在一些情况下的表现也不同(特别是排序)。默认值为 false 。 |
expireAfterSeconds |
整型值 | 指定一个秒数值,作为 TTL 来控制 MongoDB 保持集合中文档的时间。 |
v |
索引版本 | 索引版本号。默认的索引版本跟创建索引时运行的 MongoDB 版本号有关。 |
weights |
文档 | 数值,范围从 1 到 99, 999。表示就字段相对于其他索引字段的重要性。 |
default_language |
字符串 | 对文本索引而言,用于确定停止词列表,以及词干分析器(stemmer)与断词器(tokenizer)的规则。默认值为 english。 |
language_override |
字符串 | 对文本索引而言,指定了文档所包含的字段名,该语言将覆盖默认语言。默认值为 language。 |