MongoDB — метод db.collection.createIndexes()
Метод createIndexes() создает один или несколько индексов для указанной коллекции. Он используется для создания одного или нескольких индексов на основе поля документа. Используя этот метод, мы можем создавать различные типы индексов, такие как текстовый индекс, индекс 2dsphere, индекс 2d и т. д. Он принимает три параметра. Первый — это документ, содержащий пары полей и значений, где поле является ключом индекса, а значение описывает тип индекса для этого поля и другие параметры являются необязательными.
- Если индекс уже создан или существует, этот метод не создает заново существующий индекс.
- Вы можете скрыть и показать индекс, используя методы hideIndex() и unhideIndex().
Синтаксис:
db.Collection_name.createIndexes(
keysPatterns : [{Field_name:1/-1},…….],
options : <document>,
commitQuorum : <string or integer>
)
Параметры:
- Первый параметр — это массив из одного или нескольких документов, содержащих пары полей и значений, где поле является ключом индекса, а значение описывает тип индекса для этого поля. Или, другими словами, этот параметр представляет собой массив, содержащий документы спецификации индекса, и каждый документ содержит пары поля и значения, где поле является ключом индекса, а значение описывает тип индекса для этого поля. Для восходящего индекса поля укажите значение 1, а для нисходящего индекса укажите значение -1.
- Другие не являются обязательными.
Дополнительные параметры:
- Параметры: это набор параметров, управляющих созданием индекса. Тип этого параметра — документ.
- commitQuorum: это минимальное количество членов набора реплик для голосования, несущих данные.
Опции:
В документе параметров есть набор параметров, управляющих созданием индексов. Различные типы индексов могут иметь дополнительные параметры, специфичные для этого типа. Доступны следующие варианты:
- background: тип этой опции — логический. Этот параметр принимает значение true или false, если оно равно true, а затем указывает MongoDB на создание индекса в фоновом режиме. Значение по умолчанию для этой опции — false. Фоновые сборки не блокируют операции над коллекцией.
- уникальный: тип этой опции — логический. Он указывает, что для каждого индекса, указанного в массиве keyPatterns, используется уникальный индекс. Вставка или модификация документов, в которых значение ключа индекса ссылается на существующее значение в индексе, не допускается конкретными индексами. Чтобы создать уникальный индекс, установите значение true. Значение по умолчанию неверно.
- name: Тип этой опции — строка. Он принимает строку, которая является именем индекса. Если он не указан, то MongoDB создает имя, объединяя имена проиндексированных полей и порядок сортировки.
- partialFilterExpression: тип этого параметра — документ. Если он указан, индексы ссылаются только на те документы, которые соответствуют выражению запроса.
- разреженный: тип этой опции — логический. Значение по умолчанию для этой опции — false. Если мы установим его значение в true, то индексы будут ссылаться только на документы с указанными полями.
- expireAfterSeconds: Тип этой опции — целое число. Он указывает значение для отслеживания того, как долго MongoDB хранит документы в этой коллекции в секундах.
- hidden: тип этой опции — логический. Значение по умолчанию для этой опции — false. Флаг, указывающий, скрыт ли индекс в планировщике запросов. В рамках выбора плана запроса скрытый индекс не оценивается.
- storageEngine: тип этой опции — документ. Это позволяет пользователям настраивать механизм хранения для созданных индексов.
Некоторые индексы могут иметь дополнительные параметры, указанные только для этого типа, например:
Для текстовых индексов:
Все эти параметры являются необязательными:
- weights : имеет тип документа и содержит пары полей и весов для текстового индекса. Значение по умолчанию этого параметра равно 1.
- default_language: имеет строковый тип и указывает язык, который определяет список стоп-слов и правила для парадигматических и токенизаторов.
- language_override: имеет строковый тип и указывает имя полей в документе, содержащих язык переопределения для документа.
- textIndexVersion: имеет целочисленный тип и указывает номер версии текстового индекса.
Для индексов 2dsphere:
2dsphereIndexVersion: имеет целочисленный тип и указывает номер версии индекса 2dsphere. Это необязательный параметр.
Для 2d индексов:
Все эти параметры являются необязательными:
- биты: имеет целочисленный тип и указывает число точности сохраненного значения геохэша данных о местоположении. Значение этого параметра по умолчанию равно 26.
- min: имеет числовой тип и указывает нижнюю включающую границу для значений долготы и широты. Значение по умолчанию для этого параметра равно -180,0.
- max: имеет числовой тип и указывает верхнюю включающую границу для значений долготы и широты. Значение по умолчанию для этого параметра равно -180,0.
Для индексов geoHaystack:
BucketSize: имеет числовой тип и указывает количество единиц, в которых группируются локальные значения. Значение этого параметра должно быть больше 0.
Для подстановочных индексов:
wildcardProjection: имеет тип документа и позволяет пользователям включать или исключать пути к определенным полям из индекса подстановочных знаков. Это допустимо только в том случае, если вы создаете индекс с подстановочными знаками. Это необязательный параметр.
Примеры:
В следующих примерах мы работаем с:
Database: gfg
Collections: employee
Document: Three documents contains the details of the employees
- Создайте восходящий индекс для одного имени поля:
db.employee.createIndexes([{name:1}])
Здесь мы создаем индекс для поля имени в порядке возрастания.
- Создайте нисходящий индекс для одного имени поля:
db.employee.createIndexes([{name:-1}])
Здесь мы создаем индекс для поля имени в порядке убывания.
- Создайте индекс для нескольких полей: индекс по возрастанию для имени и индекс по убыванию для языка:
db.employee.createIndexes([{name:1,department:-1}]
Здесь мы создаем индексы для нескольких полей, т. е. восходящий индекс для поля имени и нисходящий индекс для поля отдела.
- Создает восходящие уникальные индексы в поле joinYear:
db.employee.createIndexes([{joinYear:1}],{unique:true})
Здесь мы создаем восходящие уникальные индексы в поле joinYear, устанавливая значение уникального параметра равным true.
- Создает нисходящие разреженные индексы для поля joinYear:
db.employee.createIndexes([{joinYear:-1}],{sparse:true})
Здесь мы создаем нисходящие разреженные индексы для поля joinYear, установив для параметра sparse значение true.
- Создает подстановочный знак в поле имени:
db.employee.createIndexes([{"name.$**":1}])