Thank you for reading this post, don't forget to subscribe!
MongoDB – это свободная и открытая документо-ориентированная база данных. Она относится к базам NoSQL, потому что в её основе не лежит традиционная реляционная структура базы данных. Вместо этого MongoDB использует JSON-подобные документы с динамическими схемами, которые можно редактировать в любой момент.
Добавляем репозиторий:
Пакета mongodb-org нет в официальном репозитории CentOS. Однако MongoDB поддерживает специальный отдельный репозиторий, который можно добавить.
Откройте официальную документацию MongoDB (раздел Install on Red Hat) и добавьте в файл информацию о последнем стабильном релизе:
vi /etc/yum.repos.d/mongodb-org.repo
[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc
Теперь нужно убедиться, что yum видит репозиторий MongoDB. Для этого используйте команду repolist.
yum repolist
[root@mongodbmaster ~]# yum repolist | grep -i mongo
mongodb-org-4.2/7 MongoDB Repository 10
или
1 2 3 4 5 6 7 |
vim /etc/yum.repos.d/mongodb.repo [mongodb] name=MongoDB Repository baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/ gpgcheck=0 enabled=1 |
Установка MongoDB
Установите пакет mongodb-org:
yum install mongodb-org
После запуска команды появится два запроса:
Is this ok [y/N]:
Первый – это запрос на разрешение установки пакета MongoDB, а второй – на импортирование GPG-ключа для подтверждения целостности загруженных пакетов. Введите Y и нажмите Enter.
или
1 |
yum install mongo-10gen mongo-10gen-server |
Запустите сервис MongoDB:
systemctl start mongod
Примечание: Управлять сервисом можно с помощью команд reload (перезагрузка, при этом процесс mongod перечитывает конфигурационный файл /etc/mongod.conf) и stop (остановка сервиса).
systemctl reload mongod
systemctl stop mongod
Утилита systemctl не выводит на экран результатов команды start. Чтобы проверить состояние сервиса, просмотрите лог mongod.log с помощью команды tail.
tail /var/log/mongodb/mongod.log
[initandlisten] waiting for connections on port 27017
Такой вывод значит, что база данных MongoDB была успешно запущена, теперь вы можете получить доступ к оболочке MongoDB.
mongo
Примечание: Во время запуска оболочки может появиться предупреждение:
** WARNING: soft rlimits too low. rlimits set to 4096 processes, 64000 files. Number of processes should be at least 32000 : 0.5 times number of files.
MongoDB является многопоточным приложением. Такое приложение может запускать дополнительные процессы для обработки рабочей нагрузки. Это предупреждение сообщает, что производительность MongoDB увеличится, если количество одновременно поддерживаемых процессов будет вдвое меньше, чем количество одновременно открытых файлов. Чтобы устранить ошибку, отредактируйте параметр processes в файле 20-nproc.conf.
vi /etc/security/limits.d/20-nproc.conf
Добавьте в конец файла такую строку:
…
mongod soft nproc 32000
Перезапустите MongoDB:
systemctl restart mongod
Попробуйте снова подключиться к оболочке. Предупреждение больше не появится.
Чтобы понять, как взаимодействовать с оболочкой, просмотрите вывод метода db.help(), который предоставляет вывод метода объектов db.
db.help()
DB methods:
db.adminCommand(nameOrDocument) - switches to 'admin' db, and runs command [ just calls db.runCommand(…) ]
db.auth(username, password)
db.cloneDatabase(fromhost)
db.commandHelp(name) returns the help for the command
db.copyDatabase(fromdb, todb, fromhost)
db.createCollection(name, { size : …, capped : …, max : … } )
db.createUser(userDocument)
db.currentOp() displays currently executing operations in the db
db.dropDatabase()
…
Процесс mongod можно оставить в фоновом режиме, а оболочку нужно закрыть:
exit
Bye
Настройка автозапуска MongoDB
Приложения на основе баз данных не могут работать без БД, потому очень важно настроить автоматический запуск демона mongod во время загрузки сервера.
Чтобы убедиться, что автозапуск не настроен, запросите состояние демона:
systemctl is-enabled mongod; echo $?
enabled
0
Ноль в выводе сообщает, что демон включен. Если в выводе 1, значит, демон отключен. Чтобы запустить его, используйте команду:
systemctl enable mongod
Теперь MongoDB будет автоматически запускаться после перезагрузки системы.
Импорт тестовых данных (опционально)
В отличие от других серверов баз данных, MongoDB не предоставляет базы данных test. Чтобы не экспериментировать с данными, которые находятся в производстве, загрузите образец данных из документации MongoDB. Полученный документ JSON содержит список ресторанов, на котором вы можете поупражняться в работе с MongoDB.
Перейдите в каталог с возможностью записи:
cd /tmp
С помощью команды curl загрузите файл JSON из документации MongoDB:
curl -O https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/primer-dataset.json
Команда mongoimport вставит данные в БД test.
Флаг —db определяет БД, которую нужно использовать,
collection указывает, где именно в БД нужно хранить данные,
file указывает файл, в который нужно добавить данные.
mongoimport --db test --collection restaurants --file /tmp/primer-dataset.json
Вывод подтвердит перемещение данных из файла primer-dataset.json.
connected to: localhost
imported 25359 documents
Теперь попробуйте создать запрос. Запустите оболочку:
mongo
Оболочка выберет базу test по умолчанию.
Запросите коллекцию restaurants с помощью метода find(), чтобы просмотреть список ресторанов. Данная коллекция содержит более 2500 записей; чтобы ограничить вывод, используйте метод limit(). Метод pretty() выведет данные в более удобном для чтения формате.
db.restaurants.find().limit( 1 ).pretty()
вывод будет следующий:
[codesyntax lang="php" blockstate="collapsed"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
{ "_id" : ObjectId("5de2135a8710e772a44ead7c"), "address" : { "building" : "469", "coord" : [ -73.961704, 40.662942 ], "street" : "Flatbush Avenue", "zipcode" : "11225" }, "borough" : "Brooklyn", "cuisine" : "Hamburgers", "grades" : [ { "date" : ISODate("2014-12-30T00:00:00Z"), "grade" : "A", "score" : 8 }, { "date" : ISODate("2014-07-01T00:00:00Z"), "grade" : "B", "score" : 23 }, { "date" : ISODate("2013-04-30T00:00:00Z"), "grade" : "A", "score" : 12 }, { "date" : ISODate("2012-05-08T00:00:00Z"), "grade" : "A", "score" : 12 } ], "name" : "Wendy'S", "restaurant_id" : "30112340" } |
[/codesyntax]
Попробуйте использовать другие методы MongoDB. Чтобы удалить тестовые данные, используйте метод db.restaurants.drop().
db.restaurants.drop()
Чтобы закрыть оболочку, введите:
exit
Bye