MongoDB - Индексирование
Индексы поддерживают эффективное разрешение запросов. Без индексов MongoDB должен сканировать каждый документ коллекции, чтобы выбрать те документы, которые соответствуют запросу запроса. Это сканирование крайне неэффективно и требует от MongoDB обработки большого объема данных.
Индексы - это специальные структуры данных, которые хранят небольшую часть набора данных в удобной для просмотра форме. В индексе хранится значение определенного поля или набора полей, упорядоченных по значению поля, как указано в индексе.
Метод createIndex ()
Чтобы создать индекс, вам нужно использовать метод createIndex () MongoDB.
Синтаксис
Базовый синтаксис createIndex() метод выглядит следующим образом ().
>db.COLLECTION_NAME.createIndex({KEY:1})
Здесь ключ - это имя поля, для которого вы хотите создать индекс, а 1 - для возрастания. Чтобы создать индекс в порядке убывания, вам нужно использовать -1.
пример
>db.mycol.createIndex({"title":1})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
>
В createIndex() вы можете передать несколько полей, чтобы создать индекс для нескольких полей.
>db.mycol.createIndex({"title":1,"description":-1})
>
Этот метод также принимает список опций (которые не являются обязательными). Ниже приводится список -
Параметр | Тип | Описание |
---|---|---|
задний план | Булево | Создает индекс в фоновом режиме, чтобы создание индекса не блокировало другие действия базы данных. Укажите true для построения в фоновом режиме. Значение по умолчанию -false. |
уникальный | Булево | Создает уникальный индекс, чтобы коллекция не принимала вставку документов, в которых индексный ключ или ключи совпадают с существующим значением в индексе. Укажите true, чтобы создать уникальный индекс. Значение по умолчанию -false. |
имя | строка | Имя индекса. Если не указано иное, MongoDB генерирует имя индекса, объединяя имена проиндексированных полей и порядок сортировки. |
редкий | Булево | Если true, индекс ссылается только на документы с указанным полем. Эти индексы занимают меньше места, но в некоторых ситуациях (особенно при сортировке) ведут себя иначе. Значение по умолчанию -false. |
expireAfterSeconds | целое число | Задает значение в секундах в качестве TTL, чтобы контролировать, как долго MongoDB хранит документы в этой коллекции. |
веса | документ | Вес представляет собой число от 1 до 99 999 и обозначает значимость поля по сравнению с другими индексированными полями с точки зрения оценки. |
язык по умолчанию | строка | Для текстового индекса - язык, определяющий список стоп-слов и правила для стеммера и токенизатора. Значение по умолчанию -English. |
language_override | строка | Для текстового индекса укажите имя поля в документе, которое содержит язык, который будет заменять язык по умолчанию. Значение по умолчанию - язык. |
Метод dropIndex ()
Вы можете удалить определенный индекс с помощью метода dropIndex () MongoDB.
Синтаксис
Базовый синтаксис метода DropIndex () следующий ().
>db.COLLECTION_NAME.dropIndex({KEY:1})
Здесь ключ - это имя файла, для которого вы хотите создать индекс, а 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()
пример
Предположим, мы создали 2 индекса в названной коллекции mycol, как показано ниже -
> 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()
пример
Предположим, мы создали 2 индекса в названной коллекции mycol, как показано ниже -
> 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"
}
]
>