Поиск по сайту:

Как установить и использовать базу данных MongoDB NoSQL в Rocky Linux 9


Это руководство существует для этих версий ОС

  • Rocky Linux 9
  • Rocky Linux 8.4

На этой странице

  1. Предпосылки
  2. Добавление репозитория MongoDB
  3. Установка сервера MongoDB и Mongosh
  4. Настройка системы
  5. Настройка администратора для MongoDB
  6. Создание пользователя и базы данных в MongoDB
  7. Вставка и запрос данных в MongoDB
  8. Обновление данных в MongoDB
  9. Удалить данные в MongoDB
  10. Заключение

MongoDB — это кроссплатформенная и распределенная система баз данных NoSQL (не SQL или нереляционная) с открытым исходным кодом. Вместо хранения данных в таблицах, как в традиционных базах данных SQL, MongoDB использует гибкие документы для хранения различных форм данных. MongoDB использует формат BSON для хранения данных, который является двоичным форматом JSON.

MongoDB — это распределенная база данных NoSQL со встроенной высокой доступностью, автоматическим аварийным переключением и избыточностью данных, горизонтальным масштабированием за счет сегментирования в распределенных кластерах и поддержкой географического развертывания в нескольких регионах. MongoDB также предоставляет API запросов, который поддерживает операции CRUD (чтение и запись), конвейер агрегации данных, текстовый поиск и геопространственные запросы.

Некоторые известные компании, которые используют MongoDB, — это Forbes, Toyota, SEGA, EA, Vodafone, Verizon и многие другие.

В этом руководстве вы установите базу данных MongoDB NoSQL на сервер Rocky Linux 9. Вы также узнаете, как оптимизировать систему Linux для развертывания сервера MongoDB. В конце этого руководства вы также изучите основные запросы сервера базы данных MongoDB.

Выполнив это руководство, вы установите MongoDB и изучите основные операции MongoDB, такие как управление пользователями, создание баз данных, вставка и извлечение данных из MongoDB, обновление данных в MongoDB и удаление данных с сервера MongoDB.

Предпосылки

Для выполнения этого руководства необходимо выполнить следующие требования:

  • Сервер Rocky Linux 9. В этом примере используется Rocky Linux с именем хоста mongodb-rocky.
  • Пользователь без полномочий root с правами администратора sudo/root.

Теперь, когда ваш Rocky Linux готов, вы готовы начать.

Добавление репозитория MongoDB

MongoDB доступен только в официальном репозитории MongoDB. Чтобы установить его, вы должны добавить репозиторий MongoDB в свою систему. На момент написания этой статьи последней версией MongoDB была v6.0, которую вы будете использовать до конца этого руководства.

На первом этапе вы добавите официальный репозиторий MongoDB в свою систему Rocky Linux.

Для начала создайте новый файл репозитория /etc/yum.repos.d/mongodb-org-6.0.repo, используя приведенную ниже команду редактора nano.

sudo nano /etc/yum.repos.d/mongodb-org-6.0.repo

Добавьте в файл следующие строки репозитория MongoDB 6.0.

[mongodb-org-6.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/6.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc

Сохраните файл и выйдите из редактора, когда закончите.

Теперь запустите приведенную ниже команду dnf, чтобы проверить список репозиториев в вашей системе Rocky Linux.

sudo dnf repolist

Вы получите такой вывод: репозиторий MongoDB 6.0 добавлен в систему Rocky Linux.

После добавления репозитория MongoDB в вашу систему вы начнете установку MongoDB.

Установка сервера MongoDB и Mongosh

На этом шаге вы установите сервер MongoDB на сервер Rocky Linux. Затем вы запустите и включите службу MongoDB для автоматического запуска при загрузке.

Запустите приведенную ниже команду dnf, чтобы установить пакеты MongoDB. Mongodb-org — это основной пакет сервера MongoDB, а mongodb-mongosh — это новая версия клиента MongoDB, альтернатива клиенту mongo.

sudo dnf install mongodb-org mongodb-mongosh

При появлении запроса введите y для подтверждения и нажмите ENTER для продолжения.

Кроме того, вам будет предложено принять ключ GPG MongoDB. Введите y и нажмите ENTER для подтверждения.

После установки сервера MongoDB запустите приведенную ниже командную утилиту systemctl, чтобы запустить службу MongoDB, и проверьте службу, чтобы убедиться, что она работает.

sudo systemctl start mongod
sudo systemctl status mongod

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

Теперь, когда сервер MongoDB запущен, на следующем шаге вы настроите и оптимизируете свою систему Rocky Linux для развертывания MongoDB.

Настройка системы

На этом шаге вы настроите свой сервер Rocky Linux и оптимизируете его для развертывания MongoDB. Это включает в себя отключение прозрачных огромных страниц (THP), увеличение ulimit и увеличение максимальной виртуальной памяти через файл sysctl.conf.

Вы можете использовать различные методы для отключения прозрачных огромных страниц (THP). В этом руководстве вы навсегда отключите THP через службу systemd.

Создайте новый файл службы systemd /etc/systemd/system/disable-thp.service, используя приведенную ниже команду редактора nano.

sudo nano /etc/systemd/system/disable-thp.service

Добавьте в файл следующие строки.

[Unit]
Description=Disable Transparent Huge Pages (THP)

[Service]
Type=simple
ExecStart=/bin/sh -c "echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled && echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag"

[Install]
WantedBy=multi-user.target

Сохраните файл и выйдите из редактора.

Затем запустите приведенную ниже командную утилиту systemctl, чтобы перезагрузить диспетчер systemd и применить новый служебный файл.

sudo systemctl daemon-reload

После этого запустите и включите службу systemd disable-thp с помощью приведенной ниже команды systemctl.

sudo systemctl enable disable-thp
sudo systemctl start disable-thp

При включенной службе disable-thp прозрачные огромные страницы (THP) будут автоматически отключаться при каждой загрузке.

Затем вы увеличите ulimit в своей системе для развертывания MongoDB. ulimit по умолчанию для общей системы Linux — 1024, а для MongoDB требуется не менее 64000.

Чтобы изменить ulimit, создайте новый файл конфигурации /etc/security/limits.d/mongodb.conf, используя приведенную ниже команду редактора nano.

sudo nano /etc/security/limits.d/mongodb.conf

Добавьте в файл следующие строки. С помощью этих строк вы установите ulimit для конкретного пользователя mongod, который является пользователем по умолчанию, запускающим сервер MongoDB.

mongod soft nproc 64000
mongod hard nproc 64000
mongod soft nofile 64000
mongod hard nofile 64000

Сохраните файл и выйдите из редактора, когда закончите.

После настройки ulimit вы теперь увеличите максимальную виртуальную память на вашем сервере MongoDB через файл /etc/sysctl.conf.

Откройте файл конфигурации /etc/sysctl.conf с помощью приведенной ниже команды редактора nano.

sudo nano /etc/sysctl.conf

Добавьте в файл следующие строки.

fs.file-max = 2097152
vm.max_map_count = 262144
vm.swappiness = 1

Сохраните файл и выйдите из редактора.

Наконец, выполните приведенную ниже команду, чтобы перезагрузить систему Rocky Linux и применить системные изменения в вашем режиме.

sudo reboot

При этом ваш сервер MongoDB теперь должен работать с отключенным THP, ulimit 64000 для пользователей MongoDB и максимальным объемом виртуальной памяти 262144. На следующем шаге вы настроите пользователя-администратора MongoDB, а затем изучите основы операций MongoDB.

Настройка администратора для MongoDB

На данный момент вы используете MongoDB на оптимизированном сервере Rocky Linux. На этом этапе вы защитите свое развертывание MongoDB, создав нового пользователя-администратора и включив аутентификацию и авторизацию на сервере MongoDB.

Сначала войдите на сервер MongoDB с помощью приведенной ниже команды mongosh.

mongosh

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

db.disableFreeMonitoring()

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

use admin

Теперь создайте нового пользователя-администратора MongoDB, используя следующий запрос MongoDB. Кроме того, обязательно измените имя пользователя в приведенном ниже запросе.

В этом примере будет создан новый пользователь-администратор myAliceAdmin. С помощью запроса passwordPrompt() вы устанавливаете пароль с помощью подсказки вместо использования обычного текста внутри запроса.

db.createUser(
  {
    user: "myAliceAdmin",
    pwd: passwordPrompt(),
    roles: [
      { role: "userAdminAnyDatabase", db: "admin" },
      { role: "readWriteAnyDatabase", db: "admin" }
    ]
  }
)

Когда новый пользователь будет создан, вы получите вывод, например {ok: 1}.

Теперь нажмите Ctrl+d или введите quit, чтобы выйти из оболочки MongoDB.

Затем откройте файл конфигурации MongoDB /etc/mongod.conf, используя приведенную ниже команду редактора nano.

sudo nano /etc/mongod.conf

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

security:
    authorization: enabled

Сохраните файл и выйдите из редактора, когда закончите.

Наконец, запустите приведенную ниже команду systemctl, чтобы перезапустить службу MongoDB и применить изменения.

sudo systemctl restart mongod

Теперь, когда пользователь-администратор MongoDB создан, а авторизация и аутентификация включены на сервере MongoDB. Далее вы проверите аутентификацию пользователя двумя разными способами.

Войдите в оболочку MongoDB с помощью приведенной ниже команды mongosh.

mongosh

После входа в систему выполните приведенный ниже запрос для аутентификации в качестве пользователя-администратора MongoDB myAliceAdmin. При запросе пароля введите пароль администратора MongoDB.

use admin
db.auth("myAliceAdmin", passwordPrompt())

Когда аутентификация прошла успешно, вы должны получить вывод, например { ok: 1 }.

Другой способ войти в оболочку MongoDB и пройти аутентификацию с помощью одной команды mongosh ниже. Введите свой пароль, когда будет предложено.

С помощью этой команды вы подключитесь к серверу MongoDB, работающему через порт 27017, и выполните аутентификацию администратора базы данных с именем пользователя myAliceAdmin.

mongosh --port 27017 --authenticationDatabase \
    "admin" -u "myAliceAdmin" -p

Вы должны войти в оболочку MongoDB после успешной аутентификации.

Теперь ваш сервер MongoDB защищен аутентификацией пользователя и пароля. Кроме того, вы создали пользователя-администратора в MongoDB. Далее вы узнаете, как создать нового пользователя MongoDB, которого можно использовать для ваших приложений.

Создание пользователя и базы данных в MongoDB

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

Прежде чем начать, убедитесь, что вы вошли в оболочку MongoDB. Затем выполните приведенную ниже команду, чтобы переключиться на новую базу данных testdb и создать нового пользователя MongoDB.

В этом примере вы создадите нового пользователя MongoDB myTestUser с ролью readWrite для базы данных testdb и ролью только для чтения для отчетов базы данных.

use tesdb
db.createUser(
  {
    user: "myTestUser",
    pwd:  passwordPrompt(),   // or cleartext password
    roles: [ { role: "readWrite", db: "testdb" },
             { role: "read", db: "reporting" } ]
  }
)

При появлении запроса введите новый пароль для нового пользователя myTestUser. И вы должны получить вывод { ok: 1 }, что означает, что новый пользователь myTestUser создан.

Затем переключитесь на администратора базы данных и выполните приведенный ниже запрос, чтобы проверить список пользователей на вашем сервере MongoDB.

use admin
db.system.users.find()

Вы увидите примерно такой результат: создается новый пользователь myTestUser с ролью readWrite для базы данных testdb и ролью read для отчета базы данных.

Теперь нажмите Ctrl+d, чтобы выйти и выйти из оболочки MongoDB.

Чтобы убедиться, что пользователь MongoDB myTestUser создан, теперь вы должны войти в MongoDB через myTestUser.

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

mongosh --port 27017 -u "myTestUser" \
    --authenticationDatabase "testdb" -p

После входа в систему выполните приведенный ниже запрос MongoDB, чтобы проверить текущее соединение.

db.runCommand({connectionStatus : 1})

Вы увидите результат, аналогичный этому снимку экрана — теперь вы подключены и аутентифицированы на сервере MongoDB через пользователя myTestUser.

Теперь, когда вы создали нового пользователя MongoDB, вы узнаете, как вставлять и извлекать данные в MongoDB.

Вставка и запрос данных в MongoDB

После создания нового пользователя MongoDB вы узнаете, как создавать базу данных, вставлять данные и извлекать данные из MongoDB. Вы узнаете, как использовать запросы insertOne и insertMany для добавления данных в MongoDB и использовать операторы запроса, такие как $in и $gte, с запросом на поиск для получения данных из MongoDB.

Во-первых, убедитесь, что вы вошли на сервер MongoDB под своим новым пользователем, в данном примере это myTestUser. Затем переключитесь на базу данных testdb с помощью приведенного ниже запроса.

use testdb

Теперь ваша оболочка MongoDB станет похожа на testdb>.

Затем запустите приведенный ниже запрос, чтобы создать новую коллекцию и вставить в нее новые данные. В этом примере вы создадите новую коллекцию фильмов и вставите новые данные с помощью запроса insertOne, который можно использовать для вставки только одних данных в коллекцию.

db.movies.insertOne(
  {
    title: "The Hobbit",
    genres: [ "Adventure", "Fantasy" ],
    runtime: 172,
    rated: "R",
    year: 2012,
    directors: [ "Peter Jackson" ],
    cast: [ "Martin Freeman", "Ian McKellen", "Richard Armitage" ],
    type: "movie"
  }
)

Теперь вы получите вывод, например, подтверждено: ok, что означает добавление новых данных и создание новой коллекции.

Теперь запустите приведенный ниже запрос, чтобы проверить список коллекций в базе данных testdb и отобразить доступные данные в testdb.

Запрос на показ коллекции покажет вам списки коллекций/таблиц в текущей базе данных, а запрос на поиск покажет доступные данные в вашей базе данных. Вы также можете отфильтровать определенные поля с помощью запроса поиска.

show collections
db.movies.find( {} )

Вы должны получить примерно такой вывод: Коллекция фильмов доступна в базе данных testdb. Кроме того, вы будете добавлять новые данные, которые вы добавили, т.е.

Затем вы также можете добавить сразу несколько данных с помощью запроса insertMany. Запустите приведенный ниже запрос, чтобы вставить два данных в коллекцию фильмов с помощью запроса insertMany.

db.movies.insertMany([
   {
      title: "The Lord of the Rings",
      genres: [ "Action", "Adventure", "Drama" ],
      runtime: 240,
      rated: "PG-13",
      year: 2001,
      directors: [ "Peter Jackson" ],
      cast: [ "Elijah Wood", "Ian McKellen", "Orlando Bloom" ],
      type: "movie"
    },
    {
      title: "Harry Potter",
      genres: [ "Adventure", "Family", "Fantasy" ],
      runtime: 140,
      rated: "R",
      year: 2007,
      directors: [ "David Yates" ],
      cast: [ "Daniel Radcliffe", "Emma Watson", "Rupert Grint" ],
      type: "movie"
    }
])

Вывод:

Теперь запустите приведенный ниже запрос поиска, чтобы получить ваши данные. С этим, youll получают данные с директорами фильтра: \Питер Джексон\.

db.movies.find( { directors: "Peter Jackson" })

Вы получите такой вывод: на вашем терминале будут показаны все фильмы с режиссерами: \Питер Джексон\.

Далее вы также можете указать условия в запросе на поиск, используя операторы запроса.

Запустите приведенный ниже запрос, чтобы получить любые данные, в которых жанры — «Действие» и/или «Семейный». Оператор $in можно использовать для извлечения данных, соответствующих любому из значений, указанных в массиве.

db.movies.find( { genres: { $in: [ "Action", "Family" ] } } )

Теперь вы должны получить такой вывод:

Другой оператор запроса, который вы можете попробовать, — это $gte, который можно использовать для получения данных, которые больше или равны указанному значению.

Перед этим выполните приведенный ниже запрос, чтобы вставить новые данные в коллекцию фильмов.

db.movies.insertOne(
  {
    title: "Transformers",
    genres: [ "Adventure", "Action", "Sci-Fi" ],
    runtime: 150,
    rated: "PG-13",
    year: 2007,
    directors: [ "Michael Bay" ],
    cast: [ "Shia LaBeouf", "Megan Fox", "Josh Duhamel" ],
    type: "movie"
  }
)

Теперь запустите приведенный ниже запрос, чтобы получить данные с помощью оператора запроса $gte. Это позволит получить все фильмы с жанрами: «Действие», которые были выпущены после или равные 2001 году.

db.movies.find( { genres: "Action", "year": { $gte: 2001 } } )

Вы получите вывод, подобный этому. В этом примере вы получите два фильма, выпущенных после или равного 2001 году в жанрах «Действие», а именно «Властелин колец» и «Трансформеры».

Имея это в виду, вы узнали, как вставлять и извлекать данные в MongoDB. Вы изучили базовый запрос insertOne для добавления одних данных и запрос insertMany для одновременного добавления нескольких данных.

Затем вы также изучили основы использования запроса поиска для извлечения данных из MongoDB. В дополнение к этому вы также узнали, как использовать операторные запросы $in и $gte в MongoDB.

На следующем шаге вы узнаете, как обновлять данные в коллекциях MongoDB.

Обновление данных в MongoDB

На этом этапе вы узнаете, как обновлять данные в MongoDB с помощью двух запросов: updateOne для обновления одного поля внутри документа и с помощью replaceOne для полной замены первых совпадающих данных новыми данными.

Для обновления данных в MongoDB вы можете использовать несколько методов и запросов. В этом примере вы узнаете, как использовать запросы updateOne и replaceOne. Запрос updateOne можно использовать для обновления одного поля в документе, а replaceOne заменит весь документ.

Запустите приведенный ниже запрос, чтобы обновить данные с помощью запроса updateOne. В этом примере вы обновите рейтинг: «PG-13» до рейтинга: «R» в фильме «Трансформеры».

db.movies.updateOne( { title: "Transformers" },
{
  $set: {
    rated: "R"
  }
})

Вы должны получить вывод, например, matchedCount: 1 и модифицированный Count: 1.

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

db.movies.find( { title: "Transformers" })    

Затем выполните приведенный ниже запрос replaceOne, чтобы заменить первые совпадающие данные в фильтре и заменить весь документ новыми данными. В этом примере вы замените весь документ фильма «Трансформеры» новыми данными.

db.movies.replaceOne(
  { title: "Transformers" },
  {
    title: "Transformers: Dark of the Moon",
    genres: [ "Adventure", "Action", "Sci-Fi" ],
    runtime: 160,
    rated: "PG-13",
    year: 2011,
    directors: [ "Michael Bay" ],
    cast: [ "Shia LaBeouf", "Rosie Huntington-Whiteley", "Tyrese Gibson" ],
    type: "movie"
  }
)

Теперь вы должны получить вывод, подобный этому.

Теперь запустите приведенный ниже запрос, чтобы проверить недавно обновленные данные в вашей MongoDB.

db.movies.find( { title: "Transformers" })
db.movies.find( { title: "Transformers: Dark of the Moon" })  

Вы должны получить примерно такой вывод: фильм «Трансформеры» удален/заменен новым фильмом «Трансформеры: Темная сторона Луны».

Удалить данные в MongoDB

На этом шаге вы узнаете, как удалить данные в документе MongoDB. Затем вы узнаете, как удалить базу данных и удалить пользователя в MongoDB.

Запустите приведенную ниже команду, чтобы удалить данные из коллекции MongoDB. В этом примере вы удалите весь документ Transformers: Dark of the Moon с помощью запроса deleteMany.

db.movies.deleteMany( { title: "Transformers: Dark of the Moon" } )
db.movies.find( { title: "Transformers: Dark of the Moon" })

Вы должны получить вывод, например, deleteCount: 1.

Затем выполните приведенную ниже команду, чтобы удалить один документ с помощью запроса deleteOne ниже. Это приведет к удалению первых совпадающих данных в фильтре.

В этом примере вы удалите первый документ, который соответствует актерскому составу: \Иэн МакКеллен\.

db.movies.deleteOne( { cast: "Ian McKellen" } )
db.movies.find( { cast: "Ian McKellen" })

Ниже приведен вывод до и после удаления данных.

Перед удалением - Вы должны посмотреть два фильма с актерским составом: Иэн Маккеллен.

После того, как документ удален - вы должны увидеть только один фильм с актерским составом: Иэн Маккеллен.

Далее вы узнаете, как удалять пользователей и базы данных в MongoDB. Чтобы удалить пользователя в MongoDB, у вас должна быть роль root для администратора MongoDB.

Запустите приведенную ниже команду для аутентификации в качестве администратора MongoDB myAliceAdmin и введите свой пароль.

use admin
db.auth("myAliceAdmin", passwordPrompt())

После аутентификации в качестве администратора MongoDB выполните приведенный ниже запрос, чтобы предоставить пользователю-администратору корневые роли.

db.grantRolesToUser("myAliceAdmin", ["root"]);

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

use testdb
db.runCommand( { dropAllUsersFromDatabase: 1 } )

Вы должны получить результат, например {n:1, ok: 1}.

Затем выполните приведенный ниже запрос, чтобы удалить/удалить базу данных testdb.

db.dropDatabase()

И вы должны получить такой вывод, как {ok: 1, drop: testdb}.

Теперь, когда testdb и пользователи в базе данных удалены.

Запустите приведенный ниже запрос, чтобы переключиться на администратора базы данных и проверить список баз данных на вашем сервере MongoDB. Вы должны увидеть, что база данных testdb удалена.

use admin
show dbs

Наконец, запустите приведенный ниже запрос, чтобы отобразить и перечислить пользователей в MongoDB.

db.system.users.find()

Вы должны получить такой вывод: Использование myTestUser удалено/удалено с сервера MongoDB.

Заключение

В этом руководстве вы установили последнюю версию сервера MongoDB (Community Edition) на сервер Rocky Linux 9. Вы также узнали, как включить аутентификацию и авторизацию на сервере MongoDB и как оптимизировать сервер Linux для развертывания MongoDB.

Попутно вы изучили основы использования команды Mongosh для подключения и управления сервером MongoDB. И изучил основные запросы MongoDB для создания пользователей, создания баз данных, вставки и извлечения данных, обновления данных и удаления/удаления данных с сервера MongoDB.

При этом вы можете узнать больше о запросах MongoDB в документации MongoDB. Кроме того, если вы заинтересованы в развертывании MongoDB в большом развертывании, вы можете попробовать включить сегментирование, позволяющее настроить горизонтальное масштабирование в кластере MongoDB.