- MongoDB進階與實戰:微服務整合、性能優化、架構管理
- 唐卓章
- 828字
- 2021-05-19 17:44:48
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字段作為開始路徑的任何一個字段。
這個索引可以匹配下面的任意一種查詢:

- 新編Visual Basic程序設計上機實驗教程
- Mastering Concurrency Programming with Java 8
- INSTANT Mock Testing with PowerMock
- Java高并發核心編程(卷2):多線程、鎖、JMM、JUC、高并發設計模式
- Python程序設計(第3版)
- The Complete Coding Interview Guide in Java
- Java:High-Performance Apps with Java 9
- Mastering Unity 2D Game Development(Second Edition)
- Creating Stunning Dashboards with QlikView
- Quantum Computing and Blockchain in Business
- .NET Standard 2.0 Cookbook
- 從0到1:HTML5 Canvas動畫開發
- 測試架構師修煉之道:從測試工程師到測試架構師
- R語言數據挖掘:實用項目解析
- C語言程序設計實踐