什么是 MongoDB 索引?
MongoDB 索引是一种能够提高数据库查询效率的数据结构,在 MongoDB 中,所有数据都存储在集合(collection)中,索引能够帮助我们更快速地查找集合中的数据。MongoDB 支持多种类型的索引,例如单键索引、复合索引等。有些类型的索引可以支持排序、分组、聚合等操作,大大提高查询效率。
索引的作用
MongoDB 索引主要有以下几个作用:
- 提高查询性能:索引可以把查询用时从全表扫描降到数据集中的一个小部分,从而减轻了服务器的负担,提高了查询的效率。
- 索引可以帮助 MongoDB 根据文档的值进行排序和聚合。
- 索引可以帮助避免集合中的重复值。
- 一些类型的索引可以实现唯一性约束,即索引值不能重复出现。
创建索引
MongoDB 提供了多种创建索引的方法,主要有以下几种:
单键索引
单键索引是最简单的一种索引类型,它只包含一个字段,是最基本也是最常用的索引类型。下面是创建单键索引的示例代码:
db.collection.createIndex({ field: 1 })
这里的 field
是要创建索引的字段名,数字 1 表示升序,数字 -1 表示降序。
复合索引
复合索引是包含多个字段的索引,它可以使查询更加高效,同时也可以减少存储空间。下面是创建复合索引的示例代码:
db.collection.createIndex({ field1: 1, field2: -1 })
这里的 field1
和 field2
分别是两个要创建索引的字段名,数字 1 表示 field1
升序,数字 -1 表示 field2
降序。
索引选项
除了指定字段名和排序方式之外,还可以通过索引选项来创建更加定制化的索引。下面是一些常用的索引选项:
选项 | 描述 |
---|---|
unique | 是否唯一索引 |
sparse | 是否稀疏索引 |
background | 后台创建索引,不阻塞其它操作 |
name | 显式命名索引,否则系统会自动为索引命名 |
expireAfter | 过期时间 |
partialFilterExpression | 创建部分索引 |
下面以 unique
和 partialFilterExpression
为例,演示如何创建带选项的索引。
唯一索引
唯一索引可以保证索引字段的唯一性,下面展示如何创建唯一索引:
db.collection.createIndex({ field: 1 }, { unique: true })
这里的 field
是要创建唯一索引的字段名,选项 { unique: true }
表示该字段的值必须唯一,否则将无法创建该索引。
创建部分索引
部分索引是只针对满足特定条件的文档进行索引,比如只有某些文档是有意义的。下面展示如何创建一个只对满足特定条件的文档进行索引的例子:
db.collection.createIndex( { field: 1 }, { partialFilterExpression: { status: { $in: ['active', 'pending'] } } })
这里的 field
是要创建部分索引的字段名,选项 { partialFilterExpression: { status: { $in: ['active', 'pending'] } } }
表示只有 status
字段的值为 active
或 pending
的文档被索引。
总结
索引是 MongoDB 中提高查询效率的重要手段,通过创建不同类型的索引,可以从多方面提升查询性能。希望读者能够掌握 MongoDB 索引的基本知识,并能在工作中熟练地运用它们。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6465efb5968c7c53b069a0a4