Как создать уникальный индекс в MongoDB

Kak Sozdat Unikal Nyj Indeks V Mongodb



В MongoDB уникальный индекс гарантирует уникальность каждого значения в определенном поле или группе полей внутри коллекции. Используя метод createIndex(), мы можем создать уникальное индексное поле для конкретной коллекции. Для обеспечения целостности данных и предотвращения дублирования записей в важных полях полезны уникальные индексы. В статье рассмотрены способы создания уникального индекса для конкретной коллекции. db.candidates.insertMany([

{ имя: 'Алекса Билл' , оценка: 'А' , курс: 'питон' },

{ имя: «Джейн Маркс» , оценка: 'Б' , курс: 'Джава' },

{ имя: «Пол Кен» , оценка: 'С' , курс: 'С#' },

{ имя: 'Эмили Джо' , оценка: 'Д' , курс: 'php' }

]);

Мы также можем создать уникальное индексное поле, когда в коллекции присутствуют некоторые документы внутри нее. Для этого мы вставляем документ в новую коллекцию, которая является «кандидатами», запрос на вставку которых задается следующим образом:







Пример 1. Создание уникального индекса одного поля

Мы можем создать индекс с помощью метода createIndex() и сделать это поле уникальным, указав опцию unique с логическим значением «true».



db.candidates.createIndex( {оценка: 1 }, {уникальный: правда})

Здесь мы запускаем метод createIndex() для коллекции «кандидатов», чтобы создать уникальный индекс определенного поля. Затем мы предоставляем поле «оценка» со значением «1» для спецификации индекса. Значение «1» здесь представляет собой возрастающий индекс коллекции. Далее мы указываем опцию «unique» со значением «true», чтобы обеспечить уникальность поля «оценка».



Вывод показывает, что для коллекции «кандидатов» создается уникальный индекс в поле «оценка»:





Пример 2. Создайте уникальный индекс из более чем одного поля

В предыдущем примере в качестве уникального индекса создается только одно поле. Но мы также можем одновременно создать два поля в качестве уникального индекса, используя метод createIndex().



db.candidates.createIndex( {оценка: 1 , курс: 1 }, {уникальный: правда})

Здесь мы вызываем метод createIndex() для той же коллекции «кандидатов». Мы указываем в методе createIndex() два поля — «оценка» и «курс» — со значением «1» в качестве первого выражения. Затем мы устанавливаем опцию unique со значением «true», чтобы создать эти два уникальных поля.

Выходные данные представляют собой два уникальных индекса «grade_1» и «course_1» для следующей коллекции «кандидатов»:

Пример 3. Создание составного уникального индекса полей

Однако мы также можем одновременно создать уникальный составной индекс внутри одной коллекции. Мы достигаем этого с помощью следующего запроса:

db.candidates.createIndex( {имя: 1 , оценка: 1 , курс: 1 }, {уникальный: правда}

Мы снова используем метод createIndex(), чтобы создать составной уникальный индекс для коллекции «кандидатов». На этот раз мы передаем три поля — «оценка», «имя» и «курс», которые действуют как поля возрастающего индекса для коллекции «кандидатов». Затем мы вызываем параметр «unique», чтобы сделать поле уникальным, поскольку этому параметру присвоено значение «true».

В выводе отображаются результаты, которые показывают, что все три поля теперь являются уникальным индексом указанной коллекции:

Пример 4. Создайте уникальный индекс повторяющихся значений полей.

Теперь мы пытаемся создать уникальный индекс для повторяющегося значения поля, что вызывает ошибку для поддержания ограничения уникальности.

db.candidates.createIndex({имя: 1 }, {уникальный: правда})

Здесь мы применяем критерии уникального индекса для поля, которое содержит похожие значения. Внутри метода createIndex() мы вызываем поле «имя» со значением «1», чтобы сделать его уникальным индексом и определить уникальную опцию со значением «истина». Поскольку в двух документах поле «имя» имеет одинаковые значения, мы не можем сделать это поле уникальным индексом коллекции «кандидаты». Ошибка дублирования ключа возникает при выполнении запроса.

Как и ожидалось, выходные данные формируют результаты, поскольку поле имени имеет одинаковые значения для двух разных документов:

Таким образом, мы обновляем коллекцию «кандидатов», присваивая уникальное значение каждому полю «имя» в документе, а затем создаем поле «имя» в качестве уникального индекса. Выполнение этого запроса обычно создает поле «имя» в качестве уникального индекса, как показано ниже:

Пример 5. Создайте уникальный индекс отсутствующего поля

Альтернативно мы применяем метод createIndex() к полю, которого нет ни в одном из документов коллекции. В результате индекс сохраняет нулевое значение для этого поля, и операция завершается неудачно из-за нарушения значения поля.

db.candidates.createIndex( {электронная почта: 1 }, {уникальный: правда})

Здесь мы используем метод createIndex(), где поле «email» имеет значение «1». Поле «электронная почта» не существует в коллекции «кандидаты», и мы пытаемся сделать его уникальным индексом для коллекции «кандидаты», установив для уникального параметра значение «true».

Когда запрос для этого выполняется, мы получаем ошибку в выводе, поскольку поле «электронная почта» отсутствует в коллекции «кандидаты»:

Пример 6. Создание уникального индекса поля с разреженной опцией

Далее, уникальный индекс также можно создать с помощью опции разреженного типа. Функциональность разреженного индекса заключается в том, что он включает только документы, имеющие индексированное поле, исключая документы, не имеющие индексированного поля. Мы предоставили следующую структуру для настройки разреженной опции:

db.candidates.createIndex( {курс: 1 },

{ имя: 'unique_sparse_course_index' , уникальный: правда, разреженный: правда } )

Здесь мы предоставляем метод createIndex(), в котором поле «курс» установлено со значением «1». После этого мы указываем дополнительную опцию для установки уникального индексного поля «курс». Опции включают «имя», которое устанавливает индекс «unique_sparse_course_index». Затем у нас есть опция «уникальный», для которой указано значение «истина», а для опции «разреженный» также установлено значение «истина».

В результате создается уникальный и разреженный индекс для поля «курс», как показано ниже:

Пример 7. Показ созданного уникального индекса с помощью метода GetIndexes()

В предыдущем примере для предоставленной коллекции был создан только уникальный индекс. Для просмотра и получения информации об уникальных индексах коллекции «кандидатов» мы используем следующий метод getIndexes():

db.candidates.getIndexes();

Здесь мы вызываем функцию getIndexes() для коллекции «кандидаты». Функция getIndexes() возвращает все индексные поля для коллекции «кандидатов», которую мы создали в предыдущих примерах.

В выходных данных отображается уникальный индекс, который мы создали для коллекции: уникальный индекс, составной индекс или уникальный разреженный индекс:

Заключение

Мы попытались создать уникальный индекс для конкретных полей коллекции. Мы рассмотрели различные способы создания уникального индекса для одного поля и нескольких полей. Мы также попытались создать уникальный индекс, операция которого завершилась неудачно из-за нарушения ограничения уникальности.