MongoDB进阶与实战:微服务整合、性能优化、架构管理
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

4.7 其他索引特性

除了前面介绍的索引,MongoDB还支持一些特殊的索引类别及特性。下面具体介绍。

4.7.1 条件索引

条件(partial)索引允许你只对部分文档建立索引,这是一种很特殊的用途。

例如,仅对业务上最常用于查询的数据集创建索引,可以节省一些空间。可根据如下代码创建条件索引:

上述代码表示,只对评分高于5分的餐馆信息进行索引。

4.7.2 稀疏索引(sparse=true)

由于MongoDB非结构化的特性,一个集合中允许结构不完全相同的两个文档共存。这意味着,对某个索引字段来说,可能某些文档中并不存在该字段,但MongoDB索引会将不存在字段的情况等同于null值处理。稀疏索引则具备这样的特性:只对存在字段的文档进行索引(包括字段值为null的文档)。

例如:

这里写入两个文档,第1个文档仅包含x字段,而第2个文档包含x、z两个字段,其中z值为null。

对集合进行检索,代码如下:

会发现两个文档同时被返回了。

接下来,对z字段建立一个稀疏索引,代码如下:

使用建立的稀疏索引进行查询,会发现只有包含z字段(值为null)的文档被返回了,结果如下:

4.7.3 文本索引

MongoDB支持全文检索功能,可通过建立文本索引来实现简易的分词检索。

预置数据如下:

创建文本索引,代码如下:

这里为stories集合创建了一个文本索引,该索引同时包含对title、summary字段的分词检索。

使用$text操作符进行文本搜索,代码如下:

$text操作符会将$search文本输入进行分词再检索,如上述代码会检索出含有monkey或sky关键词的文档。

MongoDB的文本索引功能存在诸多限制,而官方并未提供中文分词的功能,这使得该功能的应用场景十分受限。

4.7.4 模糊索引

MongoDB的文档模式是动态变化的,而模糊索引(wildcard index)可以建立在一些不可预知的字段上,以此实现查询的加速。需要注意的是,该功能是MongoDB 4.2版本才推出的新特性,在此之前的版本并不支持。

通过模糊索引,商品属性的检索变得更加容易了,例如:

其中,attributes作为嵌套文档存放了商品的多个属性,而不同商品所具有的属性很可能是不一样的。

接下来创建一个模糊索引,代码如下:

attributes.$**表示该索引将匹配以attributes字段作为开始路径的任何一个字段。

这个索引可以匹配下面的任意一种查询: