推荐答案
MongoDB 支持以下几种类型的索引:
- 单字段索引:在单个字段上创建的索引。
- 复合索引:在多个字段上创建的索引。
- 多键索引:在数组字段上创建的索引,数组中的每个元素都会被索引。
- 地理空间索引:用于地理空间数据的索引,支持 2d 和 2dsphere 索引。
- 文本索引:用于全文搜索的索引。
- 哈希索引:使用哈希函数对字段值进行索引,适用于等值查询。
- TTL 索引:用于自动删除过期文档的索引。
- 唯一索引:确保索引字段的值在集合中是唯一的。
- 稀疏索引:只对包含索引字段的文档进行索引。
- 部分索引:只对满足特定条件的文档进行索引。
本题详细解读
单字段索引
单字段索引是最简单的索引类型,适用于在单个字段上进行查询的场景。例如,在 users
集合的 name
字段上创建单字段索引:
db.users.createIndex({ name: 1 })
复合索引
复合索引适用于在多个字段上进行查询的场景。例如,在 users
集合的 name
和 age
字段上创建复合索引:
db.users.createIndex({ name: 1, age: 1 })
多键索引
多键索引适用于数组字段,数组中的每个元素都会被索引。例如,在 users
集合的 tags
字段上创建多键索引:
db.users.createIndex({ tags: 1 })
地理空间索引
地理空间索引适用于地理空间数据的查询。MongoDB 支持 2d 和 2dsphere 索引。例如,在 places
集合的 location
字段上创建 2dsphere 索引:
db.places.createIndex({ location: "2dsphere" })
文本索引
文本索引适用于全文搜索。例如,在 articles
集合的 content
字段上创建文本索引:
db.articles.createIndex({ content: "text" })
哈希索引
哈希索引使用哈希函数对字段值进行索引,适用于等值查询。例如,在 users
集合的 email
字段上创建哈希索引:
db.users.createIndex({ email: "hashed" })
TTL 索引
TTL 索引用于自动删除过期文档。例如,在 logs
集合的 createdAt
字段上创建 TTL 索引,设置文档在 3600 秒后过期:
db.logs.createIndex({ createdAt: 1 }, { expireAfterSeconds: 3600 })
唯一索引
唯一索引确保索引字段的值在集合中是唯一的。例如,在 users
集合的 username
字段上创建唯一索引:
db.users.createIndex({ username: 1 }, { unique: true })
稀疏索引
稀疏索引只对包含索引字段的文档进行索引。例如,在 users
集合的 email
字段上创建稀疏索引:
db.users.createIndex({ email: 1 }, { sparse: true })
部分索引
部分索引只对满足特定条件的文档进行索引。例如,在 users
集合的 age
字段上创建部分索引,只索引 age
大于 18 的文档:
db.users.createIndex({ age: 1 }, { partialFilterExpression: { age: { $gt: 18 } } })