Работа с MongoDB. Заметки на полях

Привет. Как фронт разработчик, я никогда особо плотно не работал с БД. Конечно были какие то пет проекты на NodeJS с использованием sqlite и даже монги, но все это было на скорую руку. Пришло время кое-что зафиксировать.

Установка

Можно поставить монгу в систему 1 - как пакет, 2 - можно поднять ее из докер образа

  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 еще больше полезных заметок, заходи!