English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
인덱스는 쿼리의 효율적인 해석을 지원합니다. 인덱스가 없으면 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} >
createIndex()는 선택 사항 파라미터를 받습니다. 선택 사항 파라미터 목록은 다음과 같습니다:
파라미터 | 타입 | 설명 |
---|---|---|
background | Boolean | 인덱스 생성 과정은 다른 데이터베이스 작업을 블록합니다. background를 지정하면 백그라운드 방식으로 인덱스를 생성할 수 있습니다. 즉, "background" 추가 선택 사항입니다. "background" 기본 값은false。 |
unique | Boolean | 만들어진 인덱스가 유일한지 여부입니다. true로 지정하면 유일한 인덱스를 생성합니다. 기본 값은false. |
name | string | 인덱스의 이름입니다. 지정하지 않으면 MongoDB는 연결된 인덱스 필드 이름과 정렬 순서를 기반으로 인덱스 이름을 생성합니다. |
dropDups | Boolean | 3.0+版本已废弃。在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。默认值为 false. |
sparse | Boolean | 对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false. |
expireAfterSeconds | integer | 指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。 |
v | index version | 索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。 |
weights | document | 索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。 |
default_language | string | 对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语 |
language_override | string | 对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 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" } ] >