官术网_书友最值得收藏!

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字段作為開始路徑的任何一個字段。

這個索引可以匹配下面的任意一種查詢:

主站蜘蛛池模板: 沂水县| 平阴县| 西峡县| 凤凰县| 巴南区| 和田市| 融水| 怀安县| 靖江市| 怀宁县| 建平县| 广灵县| 阿拉善盟| 鹤岗市| 漠河县| 皋兰县| 湟源县| 灵寿县| 朝阳市| 延边| 株洲市| 桦南县| 马山县| 碌曲县| 邵武市| 拉孜县| 巴林左旗| 奇台县| 梁山县| 合水县| 建平县| 六安市| 高邑县| 永泰县| 桃源县| 大新县| 田阳县| 昌图县| 烟台市| 寿光市| 上思县|