索引支持查詢的有效地提高效率。沒有索引,MongoDB必須掃描集合的每個文檔,以選擇與查詢語句匹配的文檔。這種掃描效率很低,需要 MongoDB 處理大量的數(shù)據(jù)。
索引是特殊的數(shù)據(jù)結(jié)構(gòu),以易于遍歷的形式存儲數(shù)據(jù)集的一小部分。 索引存儲特定字段或一組字段的值,按照索引中指定的字段值排序。
要創(chuàng)建索引,需要使用MongoDB的ensureIndex()方法。
語法
ensureIndex()方法的基本語法如下 -
>db.COLLECTION_NAME.ensureIndex({KEY:1})
這里的key是要在其上創(chuàng)建索引的字段的名稱,1是升序。 要按降序創(chuàng)建索引,需要使用-1。
示例
>db.mycol.ensureIndex({"title":1})
在ensureIndex()方法中,可以傳遞多個字段,以在多個字段上創(chuàng)建索引。
>db.mycol.ensureIndex({"title":1,"description":-1})
>
ensureIndex()方法也接受選項(xiàng)列表(可選)。 以下是列表 -
| 參數(shù) | 類型 | 描述 |
|---|---|---|
background |
Boolean |
在后臺構(gòu)建索引,以便構(gòu)建索引不會阻止其他數(shù)據(jù)庫活動,則指定background的值為true。默認(rèn)值為false。 |
unique |
Boolean |
創(chuàng)建一個唯一的索引,使得集合不會接受索引鍵或鍵匹配索引中現(xiàn)有值的文檔的插入。 指定true以創(chuàng)建唯一索引。 默認(rèn)值為false。 |
name |
String |
索引的名稱。如果未指定,則MongoDB通過連接索引字段的名稱和排序順序來生成索引名稱。 |
dropDups |
Boolean |
在可能有重復(fù)項(xiàng)的字段上創(chuàng)建唯一索引。MongoDB僅索引第一次出現(xiàn)的鍵,并從集合中刪除包含該鍵的后續(xù)出現(xiàn)的所有文檔。指定true以創(chuàng)建唯一索引。 默認(rèn)值為false。 |
sparse |
Boolean |
如果為true,則索引僅引用具有指定字段的文檔。這些索引在某些情況下(特別是排序)使用的空間較小,但行為不同。默認(rèn)值為false。 |
expireAfterSeconds |
integer |
指定一個值(以秒為單位)作為TTL,以控制MongoDB在此集合中保留文檔的時間。 |
v |
索引版本 | 索引版本號。默認(rèn)索引版本取決于創(chuàng)建索引時運(yùn)行的MongoDB的版本。 |
weights |
文檔 | 權(quán)重是從1到99999之間的數(shù)字,并且表示該字段相對于其他索引字段在分?jǐn)?shù)方面的意義。 |
default_language |
String |
對于文本索引,確定停止詞列表的語言以及句柄和分詞器的規(guī)則。 默認(rèn)值為英文。 |
language_override |
String |
對于文本索引,要指定文檔中包含覆蓋默認(rèn)語言的字段名稱。默認(rèn)值為language。 |