Работа с MongoDB. Заметки на полях
Привет. Как фронт разработчик, я никогда особо плотно не работал с БД. Конечно были какие то пет проекты на NodeJS с использованием sqlite и даже монги, но все это было на скорую руку. Пришло время кое-что зафиксировать.
Установка
Можно поставить монгу в систему 1 - как пакет, 2 - можно поднять ее из докер образа
- Переписывать процесс установки бессмысленно, вот ссылка
- Вот простой docker-compose.yml
version: '3.3'
services:
mongodb:
image: mongo
container_name: mongodb
ports:
- "27017:27017"
environment:
MONGO_INITDB_ROOT_USERNAME: $MONGO_USER
MONGO_INITDB_ROOT_PASSWORD: $MONGO_PASSWORD
volumes:
- mongodb_data:/data/db
command: mongod --auth
restart: unless-stopped
volumes:
mongodb_data:
driver: local
Не забудем установить переменные окружения для $MONGO_USER
и $MONGO_PASSWORD
Так уж вышло, что у меня в системе был когда то установлен пакет нативно, поэтому я работаю с ним (но все команды можно делать и в докере).
Проверить, запущен ли сервис можно командой sudo systemctl status mongod
Запустить или остановить так (выбери нужную) sudo systemctl start/stop/restart mongod
Запускаем интерактивный режим работы с помощью команды в терминале mongo (если возникла ошибка, возможно нужно разрешить подключаться к монге с локального адреса 127.0.0.1, об этом позже)
mongo
use admin
- перейдем в коллекцию админ
db.createUser({
user: "adminUser",
pwd: "adminPassword",
roles: [{ role: "root", db: "admin" }]}
)
Создадим рутового пользователя с паролем, чтобы можно было защитить паролем наушу бд.
Если задали когда то пароль и забыли, то попробуем обновить пользователя (предварительно отключив аутентификацию).
db.updateOne(
"adminUser",
{pwd: "anotherPass!",roles: [ { role: "root", db: "admin" } ]}
)
Посмотреть юзеров в коллекции можно так:
db.getUsers({})
db.getUser("adminUser", {showCredentials: true})
- если с паролями (но они все равно захешированы)
После включения аутентификации, с БД можно работать только после ввода пароля: db.auth({user: "adminUser", pwd: "newPaassword!"})
Выйти из монги можно так: exit
Для настройки монги есть специальный конфиг, который можно редактировать на ubuntu по пути /etc/mongod.conf
sudo nano /etc/mongod.conf
Из интересного для меня тут возможность настроить аутентификацию, раскоментив
security
authorization: enabled
Ограничить подключение с левых других IP можно в секции
net
port: 27017
bindIp: your.ip.here
нужный IP (можно через запятую указать несколько, либо 0.0.0.0 если разрешить для всех)
Не забудем рестартануть сервис для применения изменений sudo systemctl restart mongod
Для удобной работы с монгой удаленно, я использую MongoDB Compass.
Чисто не забыть: если нужно узнать дату создания записи, но нет полей createdAt, можно вытащить ее из ObjectId:
var db2 = db.collection.findOne({})
- collection название коллекции
db2._id.getTimestamp()
Все, что нужно для старта, готово. В путь!)
Кстати, в моем канале Telegram SleeplessTech еще больше полезных заметок, заходи!