Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Модуль 1. Урок 4. MongoDB для сокращателя ссылок. Java для веб-сервисов

Блок кода static{...}, обязательно выполняющийся, в момент подгрузки класса в ОЗУ:

private static final MongoCollection<Document>  LINKS_COLLECTION;
static {
    final MongoClient mongo = new MongoClient("localhost", 27017);
    final MongoDatabase db = mongo.getDatabase("hexlet");
    LINKS_COLLECTION = db.getCollection("links");
}

static{...} позволяет достать нужную коллекцию из БД и сохранить на нее ссылку в ранее объявленную LINKS_COLLECTION. По завершению своей работы, блок кода в static{...}, будет удален из поля видимости класса и не будет занимать место. Опять же - это все происходит в момент подгрузки класса в оперативную память.

Индексация в MongoDb

Индексы позволяют упорядочить данные по определенному полю, что впоследствии ускорит поиск. Например, если мы в своем приложении или задаче, как правило, выполняем поиск по полю shortUrl, то мы можем индексировать коллекцию по этому полю командой:

> db.links.createIndex({"shortUrl" : 1})

Таким образом с помощью метода createIndex устанавливается индекс по полю shortUrl. MongoDB позволяет установить до 64 индексов на одну коллекцию. Для того чтобы поле shortUrl было уникальным, достаточно добавить флаг unique. Вот так:

> db.links.createIndex({"shortUrl" : 1}, {"unique" : true})

В тоже время тут есть свои тонкости. Так, представим, что поле shortUrl в нашем документе пустое (не определено)... В этом случае для добавляемого документа автоматически создается ключ shortUrl со значением null. Поэтому при добавлении второго документа, в котором не определен ключ shortUrl, будет выброшено исключение, так как ключ shortUrl со значением null уже присутствует в коллекции.

Естественно можно задать уникальный индекс для обоих полей:

> db.links.createIndex({"shortUrl" : 1, "longUrl" : 1}, {"unique" : true})

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


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.
Об обучении на Хекслете

Для полного доступа к курсу нужна профессиональная подписка

Профессиональная подписка откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
900
упражнения
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 120 курсов, 2000+ часов теории
  • 900 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff

Есть вопрос или хотите участвовать в обсуждении?

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг»