📜  MongoDB-索引

📅  最后修改于: 2020-11-27 05:55:43             🧑  作者: Mango


索引支持查询的有效解析。没有索引,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})
>

此方法还接受选项列表(可选)。以下是列表-

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.

dropIndex()方法

您可以使用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()方法

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

句法

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()方法

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

句法

以下是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"
    }
]
>