MongoDB - 索引



索引支援高效地解決查詢。如果沒有索引,MongoDB 必須掃描集合中的每個文件以選擇與查詢語句匹配的文件。這種掃描效率極低,並且需要 MongoDB 處理大量資料。

索引是特殊的資料結構,以易於遍歷的形式儲存資料集的一小部分資料。索引儲存特定欄位或欄位集的值,並根據索引中指定的欄位值進行排序。

createIndex() 方法

要建立索引,您需要使用 MongoDB 的 createIndex() 方法。

語法

createIndex() 方法的基本語法如下所示。

>db.COLLECTION_NAME.createIndex({KEY:1})

這裡 key 是要建立索引的欄位的名稱,1 表示升序。要建立降序索引,您需要使用 -1。

示例

>db.mycol.createIndex({"title":1})
{
	"createdCollectionAutomatically" : false,
	"numIndexesBefore" : 1,
	"numIndexesAfter" : 2,
	"ok" : 1
}
>

createIndex() 方法中,您可以傳遞多個欄位,以在多個欄位上建立索引。

>db.mycol.createIndex({"title":1,"description":-1})
>

此方法還接受選項列表(可選)。以下是列表 -

引數 型別 描述
background 布林值 在後臺構建索引,以便構建索引不會阻塞其他資料庫活動。指定 true 以在後臺構建。預設值為 false
unique 布林值 布林值
建立一個唯一索引,以便集合不會接受插入索引鍵或鍵與索引中現有值匹配的文件。指定 true 以建立唯一索引。預設值為 false name 字串
索引的名稱。如果未指定,MongoDB 會透過連線索引欄位的名稱和排序順序來生成索引名稱。 布林值 sparse
布林值 如果為 true,則索引僅引用包含指定欄位的文件。這些索引使用更少的空間,但在某些情況下(特別是排序)的行為會有所不同。預設值為 false expireAfterSeconds
整數 以秒為單位指定一個值作為 TTL,以控制 MongoDB 在此集合中保留文件的時間。 weights
文件 name 權重是介於 1 到 99,999 之間的數字,表示該欄位相對於其他索引欄位在分數方面的意義。
default_language name 對於文字索引,確定停止詞列表以及詞幹分析器和分詞器的規則的語言。預設值為 English

language_override

對於文字索引,指定文件中包含用於覆蓋預設語言的語言的欄位的名稱。預設值為 language。

語法

dropIndex() 方法

>db.COLLECTION_NAME.dropIndex({KEY:1})

您可以使用 MongoDB 的 dropIndex() 方法刪除特定索引。

dropIndex("name_of_the_index")

示例

> db.mycol.dropIndex({"title":1})
{
	"ok" : 0,
	"errmsg" : "can't find index with key: { title: 1.0 }",
	"code" : 27,
	"codeName" : "IndexNotFound"
}

DropIndex() 方法的基本語法如下所示。

這裡,“key”是要從中刪除現有索引的檔案的名稱。您還可以直接指定索引名稱,而不是索引規範文件(以上語法),如

語法

dropIndexes() 方法

>db.COLLECTION_NAME.dropIndexes()

示例

此方法刪除集合上的多個(指定的)索引。

> db.mycol.createIndex({"title":1,"description":-1})

DropIndexes() 方法的基本語法如下所示 -

>db.mycol.dropIndexes({"title":1,"description":-1})
{ "nIndexesWas" : 2, "ok" : 1 }
>

假設我們在名為 mycol 的集合中建立了 2 個索引,如下所示 -

以下示例刪除了上面建立的 mycol 的索引 -

語法

getIndexes() 方法

db.COLLECTION_NAME.getIndexes()

示例

此方法刪除集合上的多個(指定的)索引。

> db.mycol.createIndex({"title":1,"description":-1})

此方法返回集合中所有索引的描述。

> db.mycol.getIndexes()
[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_",
		"ns" : "test.mycol"
	},
	{
		"v" : 2,
		"key" : {
			"title" : 1,
			"description" : -1
		},
		"name" : "title_1_description_-1",
		"ns" : "test.mycol"
	}
]
>
以下示例檢索集合 mycol 中的所有索引 -
列印頁面