索引能夠?qū)崿F(xiàn)高效地查詢(xún)。沒(méi)有索引,MongoDB 就必須掃描集合中的所有文檔,才能找到匹配查詢(xún)語(yǔ)句的文檔。這種掃描毫無(wú)效率可言,需要處理大量的數(shù)據(jù)。
索引是一種特殊的數(shù)據(jù)結(jié)構(gòu),將一小塊數(shù)據(jù)集保存為容易遍歷的形式。索引能夠存儲(chǔ)某種特殊字段或字段集的值,并按照索引指定的方式將字段值進(jìn)行排序。
要想創(chuàng)建索引,需要使用 MongoDB 的 ensureIndex() 方法。
ensureIndex() 方法的基本語(yǔ)法格式為:
>db.COLLECTION_NAME.ensureIndex({KEY:1})
這里的 key 是想創(chuàng)建索引的字段名稱(chēng),1 代表按升序排列字段值。-1 代表按降序排列。
>db.mycol.ensureIndex({"title":1})
>
可以為 ensureIndex() 方法傳入多個(gè)字段,從而為多個(gè)字段創(chuàng)建索引。
>db.mycol.ensureIndex({"title":1,"description":-1})
>
ensureIndex() 方法也可以接受一些可選參數(shù),如下所示:
| 參數(shù) | 類(lèi)型 | 描述 |
|---|---|---|
background |
布爾值 | 在后臺(tái)構(gòu)建索引,從而不干擾數(shù)據(jù)庫(kù)的其他活動(dòng)。取值為 true 時(shí),代表在后臺(tái)構(gòu)建索引。默認(rèn)值為 false |
unique |
布爾值 | 創(chuàng)建一個(gè)唯一的索引,從而當(dāng)索引鍵匹配了索引中一個(gè)已存在值時(shí),集合不接受文檔的插入。取值為 true 代表創(chuàng)建唯一性索引。默認(rèn)值為 false。 |
name |
字符串 | 索引名稱(chēng)。如果未指定,MongoDB 會(huì)結(jié)合索引字段名稱(chēng)和排序序號(hào),生成一個(gè)索引名稱(chēng)。 |
dropDups |
布爾值 | 在可能有重復(fù)的字段內(nèi)創(chuàng)建唯一性索引。MongoDB 只在某個(gè)鍵第一次出現(xiàn)時(shí)進(jìn)行索引,去除該鍵后續(xù)出現(xiàn)時(shí)的所有文檔。 |
sparse |
布爾值 | 如果為 true,索引只引用帶有指定字段的文檔。這些索引占據(jù)的空間較小,但在一些情況下的表現(xiàn)也不同(特別是排序)。默認(rèn)值為 false。 |
expireAfterSeconds |
整型值 | 指定一個(gè)秒數(shù)值,作為 TTL 來(lái)控制 MongoDB 保持集合中文檔的時(shí)間。 |
v |
索引版本 | 索引版本號(hào)。默認(rèn)的索引版本跟創(chuàng)建索引時(shí)運(yùn)行的 MongoDB 版本號(hào)有關(guān)。 |
weights |
文檔 | 數(shù)值,范圍從 1 到 99, 999。表示就字段相對(duì)于其他索引字段的重要性。 |
default_language |
字符串 | 對(duì)文本索引而言,用于確定停止詞列表,以及詞干分析器(stemmer)與斷詞器(tokenizer)的規(guī)則。默認(rèn)值為 english。 |
language_override |
字符串 | 對(duì)文本索引而言,指定了文檔所包含的字段名,該語(yǔ)言將覆蓋默認(rèn)語(yǔ)言。默認(rèn)值為 language。 |