📅  最后修改于: 2020-11-27 05:55:43             🧑  作者: Mango
索引支持查询的有效解析。没有索引,MongoDB必须扫描集合的每个文档以选择与查询语句匹配的那些文档。这种扫描效率极低,需要MongoDB处理大量数据。
索引是特殊的数据结构,以易于遍历的形式存储数据集的一小部分。索引存储特定字段或一组字段的值,该值由索引中指定的字段值排序。
要创建索引,您需要使用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})
>
此方法还接受选项列表(可选)。以下是列表-
Parameter | Type | Description |
---|---|---|
background | Boolean | Builds the index in the background so that building an index does not block other database activities. Specify true to build in the background. The default value is false. |
unique | Boolean | Creates a unique index so that the collection will not accept insertion of documents where the index key or keys match an existing value in the index. Specify true to create a unique index. The default value is false. |
name | string | The name of the index. If unspecified, MongoDB generates an index name by concatenating the names of the indexed fields and the sort order. | sparse | Boolean | If true, the index only references documents with the specified field. These indexes use less space but behave differently in some situations (particularly sorts). The default value is false. |
expireAfterSeconds | integer | Specifies a value, in seconds, as a TTL to control how long MongoDB retains documents in this collection. |
weights | document | The weight is a number ranging from 1 to 99,999 and denotes the significance of the field relative to the other indexed fields in terms of the score. |
default_language | string | For a text index, the language that determines the list of stop words and the rules for the stemmer and tokenizer. The default value is English. |
language_override | string | For a text index, specify the name of the field in the document that contains, the language to override the default language. The default value is language. |
您可以使用MongoDB的dropIndex()方法删除特定索引。
DropIndex()方法的基本语法如下()。
>db.COLLECTION_NAME.dropIndex({KEY:1})
此处的key是您要在其上创建索引的文件的名称,而1代表升序。要以降序创建索引,您需要使用-1。
> db.mycol.dropIndex({"title":1})
{
"ok" : 0,
"errmsg" : "can't find index with key: { title: 1.0 }",
"code" : 27,
"codeName" : "IndexNotFound"
}
此方法删除集合上的多个(指定)索引。
DropIndexes()方法的基本语法如下()-
>db.COLLECTION_NAME.dropIndexes()
假设我们在命名的mycol集合中创建了2个索引,如下所示-
> db.mycol.createIndex({"title":1,"description":-1})
以下示例删除了上面创建的mycol索引-
>db.mycol.dropIndexes({"title":1,"description":-1})
{ "nIndexesWas" : 2, "ok" : 1 }
>
此方法返回集合中所有索引的描述。
以下是getIndexes()方法的基本语法-
db.COLLECTION_NAME.getIndexes()
假设我们在命名的mycol集合中创建了2个索引,如下所示-
> db.mycol.createIndex({"title":1,"description":-1})
以下示例检索集合mycol中的所有索引-
> 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"
}
]
>