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