- Single Field. 单字段索引。没啥好说的。
- Compound Index. 多字段组合索引。根据每个字段在索引中的出现位置,可以看做是一个多维的向量。
- Multikey Index. 多键索引。就是对数组中的每一个元素建立索引。有点“倒排索引”的意思。
- Geospatial Index. 经纬度索引。其目的是方便经纬度相关的查找操作。是2D Index的一个特例,而2D Index是如何实现的?实现可以多种方式。比如Compound Index。
- Text Indexes.也是需要先分词再建立“倒排索引”,可以看做是一个玩具版的ES。估计引用场景也非常简单。搞全文检索有更加专业的工具,没人会用MongoDB。
- Hashed Indexes. 哈希索引。也没啥好说的,单值匹配很快,不支持范围查询。
与之对应的,不同的索引类型有不同的特性。
- Unique Indexes. 唯一索引。除了 Text indexes 都支持。
- Partial Indexes. 部分索引,或者是条件索引。就是在插入数据的时候,如果数据满足一定的条件,才将该条数据建立索引。查找的时候也是条件满足才去索引中查找。因为索引的数据是全部数据的一个子集,所以叫做 Partial Indexes.
- Sparse Indexes. 稀疏索引。由于MongoDB插入的数据是Schemaless的。所以如果某个字段不存在,就不对该条记录建立索引。也就是说,通过索引无法查询到这条插入数据的存在。
- TTL Indexes. 过期索引。对索引的时间字段添加过期限制。超过一定的时间之后,该条记录就会被删除。
db.log_events.createIndex( { "createdAt": 1 }, { expireAfterSeconds: 3600 } )
# 3600秒后, 该条记录被删除
db.log_events.insert( {
"createdAt": new Date(),
"logEvent": 2,
"logMessage": "Success!"
} )