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 | Boolean | 在后台构建索引,以便构建索引不会阻塞其他数据库活动。指定true以在后台构建。默认值为 false 。 |
unique | Boolean | 创建唯一索引,使集合不接受索引键或键与索引中现有值匹配的文档插入。指定true创建唯一索引。默认值为 false 。 |
name | string | 索引的名称。如果未指定,MongoDB通过连接索引字段的名称和排序顺序生成索引名称。 |
sparse | Boolean | 如果为true,则索引仅引用具有指定字段的文档。这些索引占用更少的空间,但在某些情况下(尤其是排序)表现不同。默认值为 false 。 |
weights | document | 权重是一个从1到99,999的数字,表示字段相对于其他索引字段在分值方面的重要性。 |
default_language | string | 对于文本索引,确定停用词列表和词干提取器和标记器规则的语言。默认值为 英语 。 |
language_override | string | 对于文本索引,指定包含要覆盖默认语言的语言的文档中的字段的名称。默认值为language。 |
dropIndex() 方法
您可以使用 MongoDB 的 dropIndex() 方法删除特定的索引。
语法
dropIndex() 方法的基本语法如下()。
>db.COLLECTION_NAME.dropIndex({KEY:1})
在这里,”key” 是您想要删除现有索引的文件名。除了索引规范文件(上面的语法)之外,您还可以直接指定索引的名称:
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"
}
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"
}
]
>