Работа с mongodb linux

Установка и подключение к MongoDB

В данной инструкции мы рассмотрим процесс установки MongoDB на Linux Ubuntu (Debian). Также будут приведены примеры настройки подключения по сети, защита соединения с помощью шифрования и аутентификации.

Установка

На странице MongoDB Community Downloads смотрим стабильные версии программного продукта. На момент обновления инструкции это была 4.4.

Обратите внимание, установка MongoDB возможна на большое число популярных операционных систем — Amazon, Debian, Ubuntu, macOS, CentOS, Red Hat, Windows и другие.

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

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

С помощью скопированной ссылки скачиваем и устанавливаем ключ:

wget -qO — https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add —

Создаем файл для настройки репозитория Ubuntu:

deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse

* focal — название релиза Ubuntu. В данном примере, версия 20.04. На данный момент возможны варианты:

  • focal: 20.04.
  • bionic: 18.04.
  • xenial: 16.04.

Обновляем список пакетов:

apt-get install mongodb-org

Стартуем сервис и разрешаем его автозапуск:

systemctl start mongod

systemctl enable mongod

Для подключения к СУБД вводим команду:

Можно для проверки ввести команду, которая покажет созданные базы данных:

После первой установки мы должны увидеть следующее:

admin 0.000GB
config 0.000GB
local 0.000GB

В качестве примера работы мы можем попробовать создать новую базу данных и коллекцию. Объекты в MongoDB создаются автоматически при первом к ним обращении.

Для создания базы просто обращается к ней:

* в данном примере будут создана база newDB.

Для создания коллекции, выполняем команду на вставку данных:

Выходим из оболочки SQL:

Доступ по сети

По умолчанию к установленной базе можно подключиться только с локального компьютера. Рассмотрим процесс настройки сетевого доступа.

Для начала, откроем порт в брандмауэре:

iptables -I INPUT -p tcp —dport 27017 -j ACCEPT

* по умолчанию, MongoDB работает на TCP-порту 27017.

В системах на базе Ubuntu и Debian брандмауэр работает по принципу разрешения. Если мы не меняли данной настройки, то нам не обязательно создавать разрешающее правило для Mongo.

Открываем конфигурационный файл СУБД:

Находим директиву net и в ней опцию bindIp — добавляем IP-адрес, на котором наш сервер должен принимать запросы для MongoDB:

net:
port: 27017
bindIp: 127.0.0.1, 192.168.1.15

* в нашем примере мы добавили к 127.0.0.1 адрес 192.168.1.15 — это сетевой адрес нашего сервера, на котором он должен принимать запросы.

Перезапускаем сервис mongod:

systemctl restart mongod

Чтобы проверить подключение, на другом компьютере должен быть установлен клиент для подключения к Mongo. Процесс его установки схож с установкой сервера. Рассмотрим пример для Ubuntu.

Устанавливаем ключ для репозитория:

wget -qO — https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add —

deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse

* как в случае с сервером, focal — название релиза Ubuntu. В данном примере, версия 20.04. Другие варианты: bionic: 18.04, xenial: 16.04.

Обновляем список пакетов:

Устанавливаем клиентскую часть:

apt-get install mongodb-org-shell

Теперь можно подключиться к нашему серверу:

* в данном примере мы подключаемся к серверу MongoDB 192.168.1.15.

Также мы можем использовать MongoDB Compass — это приложение под Windows, Linux и macOS для работы с базой Mongo в графическом интерфейсе. Скачать его можно на странице официального сайта.

Аутентификация

По умолчанию, мы можем подключиться к СУБД без авторизации. Если нам необходимо повысить безопасность работы с базой, можно требовать ввода логина и пароля.

Читайте также:  Windows 10 как настроить отображение скрытых значков

Заходим в командную оболочку Mongo:

Подключаемся к базе admin:

Создаем пользователя, под которым будем авторизовываться:

* в данном примере мы создадим пользователя с правами доступа на все базы. Логин root, пароль будет запрошен после ввода.

Придумываем и вводим пароль

После создания пользователя мы должны увидеть, примерно, следующую картину:

Successfully added user: <
«user» : «root»,
«roles» : [
<
«role» : «userAdminAnyDatabase»,
«db» : «admin»
>,
«readWriteAnyDatabase»
]
>

Выходим из командной оболочки:

Открываем конфигурационный файл:

Находим директиву security и задаем параметр authorization:

security:
authorization: enabled

Перезапускаем сервис mongod:

systemctl restart mongod

Теперь пробуем подключиться к mongo. Мы можем авторизоваться несколькими способами.

а) Авторизация при подключении:

mongo —authenticationDatabase «admin» -u «root» -p

* в данном примере мы подключимся к базе под пользователем root. Пароль будет запрошен системой после ввода команды.

б) Авторизация после подключения:

Теперь усилим безопасность, зашифровав передачу данных. Для этого нам понадобиться сертификат. В нашем примере, мы будем использовать самоподписанный сертификат, но в продуктивной среде, лучше его купить или запросить у Let’s Encrypt.

Создаем каталог, в котором разместим наши сертификаты:

mkdir -p /etc/ssl/mongodb

Сгенерируем самоподписанный сертификат:

openssl req -new -x509 -days 1461 -nodes -out /etc/ssl/mongodb/cert.pem -keyout /etc/ssl/mongodb/cert.pem -subj «/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=mongo.dmosk.local/CN=mongo»

Выставим в качестве владельца на файлы сертификата пользователя mongodb:

chown mongodb:mongodb /etc/ssl/mongodb/cert.pem

Открываем конфигурационный файл СУБД:

В директиву net дописываем опции TLS:

net:
.
tls:
mode: requireTLS
certificateKeyFile: /etc/ssl/mongodb/cert.pem

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

Перезапускаем сервис mongod:

systemctl restart mongod

Для подключения к базе с использованием шифрования используем команду:

mongo —tls —tlsAllowInvalidCertificates

* в данном примере мы указываем при подключении использовать шифрование с использованием TLS. Опция tlsAllowInvalidCertificates говорит, что клиент должен принять неправильный сертификат (так как у нас он самоподписанный).

Так как у нас еще настроена аутентификация, для подключения введем такую команду:

mongo —tls —tlsAllowInvalidCertificates —authenticationDatabase «admin» -u «root» -p

Для подключения к нашему серверу по сети, полная команда будет такой:

mongo «mongodb://192.168.1.15:27017» —tls —tlsAllowInvalidCertificates —authenticationDatabase «admin» -u «root» -p

Примеры подключения из языков программирования

Рассмотрим небольшие примеры для подключения к MongoDB из языков программирования PHP и Python.

Для возможности работы PHP с Mongo необходимо установить соответствующее расширение. Выполняем пошагово следующие действия:

apt-get install php-pear php-dev

pecl channel-update pecl.php.net

pecl install mongodb

Для каждого возможного варианта использования PHP необходимо создать отдельный конфигурационной файл. В данном примере, под php 7.4 для cli, php-fpm, apache.

Источник

Основы MongoDB за 5 минут

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

MongoDB — документоориентированная система управления базами данных, не требующая описания схемы таблиц.

Считается одним из классических примеров NoSQL-систем, использует JSON-подобные документы и схему базы данных. Данную базу данных применяют в веб-разработке, в частности, в рамках JavaScript-ориентированного стека MEAN, MEVN, MERN, которые часто используются веб-разработчиками, как любимые стеки технологий для создания приложений.

Установка

Скачать MongoDB можно с официального сайта для Linux, MacOS, Windows.

В Linux это также можно сделать с одной из следующих команд:

apt

dnf

brew

Также для того чтобы взаимодействовать с БД нам потребуется шелл (MongoShell), который качается отдельно: https://www.mongodb.com/try/download/shell?jmp=docs

Читайте также:  Windows operatsion tizimi versiyalari

Основы

После успешной установки MongoDB и Mongoshell мы можем спокойно начать взаимодействовать с базой данных с помощью терминала. Достаточно просто ввести mongosh :

Как мы видим мы находимся в базе данных test , однако на самом деле её пока что не существует!

Более подробно о том, что будет ниже можно прочитать здесь

Всё дело в том, что в mongoDB не существует базы данных, покуда мы в неё что-то не поместим. Также, при обращении к определенным объектам (база данных, коллекция) mongoDB они меняют значение, только если существуют, а если не существуют, то они просто создаются. Давайте продемонстрируем принцип работы:

Команда show dbs показывает какие базы данных существуют в данный момент. Как мы видим в списке нет значения test .

Для того чтобы создать новую базу данных (или использовать существующую) мы должны использовать ключевое слово use :

Как мы видим мы перешли в базу данных new_database , однако в списке мы её не наблюдаем (это из-за того правила, что я писал вверху: базы данных не существует, покуда неё что-то не поместить).

Давайте создадим новую коллекцию под названием customers (покупатели) и положим туда значение name: Daniil :

Тут мы обратились к базе данных с помощью db , затем мы указали коллекцию через точку и положили туда значение с помощью функции insertOne() . JavaScript является языком запросов MongoDB. Под капотом MongoDB находится MozJs, который является форком SpiderMonkey (Mozilla Firefox).Если вам интересно, вы можете взглянуть на исходный код.

Теперь давайте посмотрим какие коллекции есть в нашей базе данных, но как это сделать? Можно ввести db. и нажать Tab, для того чтобы посмотреть какие свойства и методы есть у нашего объекта db (объектом для легкости понимания можно считать обычный объект из JavaScript, тут даже методы есть похожие: toString , isPrototypeOf , hasOwnProperty )

Далее мы можем посмотреть наши коллекции с помощью специального метода getCollectionNames :

Вуаля! У нас есть массив из наших коллекций и по такому же принципу (нахождения нужных нам методов) можно исследовать всю MongoDB, однако мне ещё есть что рассказать, продолжим.

Есть ещё сокращения команд, которые мы тоже можем использовать, например show collections вернёт нам то же самое, однако вид будет более читаемый для человека:

У нашей коллекции, к слову, тоже есть методы и свойства, но они немного другие:

Мы можем использовать коллекцию в связке с find() , для того чтобы вывести всё содержимое коллекции:

Давайте добавим ещё нескольких покупателей с помощью метода insertMany() :

Итак, давайте заметим несколько моментов на скриншоте:

Метод insertMany() принимает массив элементов, а не просто элементы

MongoDB все равно прилегают ли ключи и их значения к скобкам или нет

Синтаксис MongoDB очень похож на синтаксис JavaScript, поэтому мы можем использовать все виды кавычек (двойные, одинарные, обратные).

В ответ данный метод отдал нам объект, в котором есть свойство acknowledged (подробнее читайте тут) и вложенный объект с ключами из массива и соответствующими им id .

Теперь давайте выведем двух пользователей (не важно каких) из нашего списка используем следующую команду db.customers.find().limit(2) :

Как мы видим мы вывели всего два объекта из нашей коллекции, однако что ещё мы можем делать с «найденными» объектами? А вот что:

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

Теперь давайте рассортируем наши значения с помощью метода sort() :

Читайте также:  Где находится автоматическое обновление windows

Метод sort() принимает в аргументы объект, где указано по какому значению нужно провести сортировку. 1 говорит о том, что сортировку нужно произвести в порядке возрастания, -1 же будет производить её в порядке убывания.

Можно сортировать значения и с помощью двух аргументов, но для начала давайте их добавим! Для того чтобы добавить значения к найденному элементу коллекции давайте применим функцию updateOne :

Необычное ключевое слово $set , которое вы видите на скриншоте является атомным оператором, о нём мы поговорим попозже. Главное что стоит сейчас увидеть — то что мы поменяли значение, а $set просто указывает новые значения в нашей записи.

Теперь давайте применим метод updateMany() для того чтобы поменять значения у множества элементов, а затем перейдем к сортировке с двумя аргументами:

Появился ещё один атомный оператор, который обозначает не равно (ne — not equal). В данном случае запрос звучит так: «Найди мне все записи, где имя не равно ‘Daniil’, и поставь им значение ‘age’ в 15«. (Для справки: set (англ.) — назначить, поставить)

Теперь рассортируем массив с помощью двух аргументов:

Тут sort() принял аргументом объект с двумя ключами. Сначала он будет сортировать записи по первому ключу, а если найдет повторяющиеся первые ключи, то начнёт сортировать по второму ключу. -1 означает обратную сортировку (в порядке убывания).

MongoDB позволяет получить специфические поля из найденных объектов и не показывать другие (нам ненужные поля):

Здесь мы просто наши все записи с помощью <> (так как определенного идентификатора для нахождения не задано, mongoDB вернул нам все записи), а вторым аргументом передали что именно хотим видеть. 1 тут соответствует выводу, а 0 — наоборот, те данные, которые не будут выводиться.

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

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

Более сложные запросы

Атомные операторы нужны для того, чтобы усложнять запросы. Популярные атомные операторы:

gt — greater than (больше)

lt — less than (меньше)

gte и lte — больше или равно и меньше или равно

in — значение содержится в чем-то

nin — значение не содержится в чем-то

set — изменить или добавить

Некоторые из них мы рассмотрим ниже:

Как мы видим тут вывелись все записи, у которых поле age больше чем 15.

Тут же вывелись все записи, у которых имя содержится в массиве [‘Daniil’, ‘Jinx’] .

Добавим ещё один объект, у которого не будет поля age и проверим работу оператора exists :

Видим, что тут exists отработал верно и запись с name: ‘Denis’ не вывелась.

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

Все остальные команды по типу:

deleteOne (удаляет запись)

replaceOne (заменяет запись)

updateOne (обновляет запись)

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

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

Источник

Оцените статью