MongoDB
Теория
MongoDB - это документоориентированная БД, которая работает с JSON форматом представления данных База данных состоит из коллекций. Коллекции хранят документы. Документы же хранятся в JSON-подобном формате. Документы в одной коллекции необязательно должны иметь одинаковую структуру
Что представляет из себя Mongo DB?
Коннектимся к БД
И тут мы можем увидеть все наши БД
И, конечно, нужно избегать графического интерфейса и работать только в терминале
И первым делом отобразим список имеющихся у нас БД
Создание удаление использование баз данных
Оператор use определит какую сущность мы будем использовать. Если её нет, то эта сущность будет создана
db.createCollection(“имя_коллекции”) - создаст новую коллекцию внутри активной БД
Увидеть изменения мы сможем только после обновления БД
И вот мы видим созданную коллекцию
Отобразит все коллекции внутри активной БД
Удалит базу данных
insert - Добавление документа в коллекцию
insert - устаревший метод, который позволяет добавлять новые объекты в базу. В примере инсертится новый документ в коллекцию users
Однако мы можем увидеть такую ошибку, которая говорит нам, что insert использовать не стоит - этот метод нежелателен для использования
'DeprecationWarning: Collection.insert() is deprecated. Use insertOne, insertMany, or bulkWrite.
Добавим ещё несколько записей в документ
В ответ получим, что к 5и сущностям у нас добавлены ещё и id
find - Поиск документов в коллекции
Метод find выведет весь документ в коллекции users
find - Поиск по критериям
Так же в метод find мы можем вписать критерии поиска, а именно вложить объект с нужными нам свойствами и получить объекты с такими же свойствами:
Свойств может быть сколько угодно
find - $or Условие ИЛИ
В качестве объекта так же внутрь можно передавать операторы для работы с условиями. Мы можем через {$or: [{первое условие}, {второе условие}]} передавать массив условий поиска определённых значений
find - gt, gte, $ne, меньше, больше, либо равно, не равно
lte - less then or equal - ищет значения меньше или = заданному gte - greater or equal - ищет значения больше или = заданному $ne - not equal - ищет значения не равные заданным
Пример использования операции, которая выведет все объекты с возрастом меньше 30:
find.sort- Сортировка
Метод sort(), который вызывается после find, сортирует значения по определённому свойству. Задание сортировки зависит от числа 1 (возрастание) или -1 (убывание)
Конкретно в этом примере выведутся все записи в порядке возрастания
А тут в порядке убывания
find.limit - Ограничение по количеству получаемых документов
Функция limit()
позволяет нам ограничить число получаемых записей
Так же имеется функция findOne({свойство_объекта}), которая позволяет вывести один объект, который удовлетворяет заданным условиям
Уже функция distinct() вернёт только уникальные записи. В базе находится два поля с ‘Valery’. Дистинкт выведет все имена без повторений
Так же хочется сказать, что мы можем не просто найти одну запись, но так же и удалить/переместить/обновить её
update - $set обновление документов в коллекции
Функция update() модифицирует первую найденную запись. Однако лучше использовать updateOne() или updateMany()
Было две записи с ‘Valery’ - одна заменилась на введённые выше значения
update - $rename переименовать поле документа
Модификтор $rename переименует ключи
Конкретно в примере ключ name будет переименован в fullname
delete - Удалить документ из коллекции
Функции deleteOne() и deleteMany() позволяют удалить поле по заданному свойству
Конкретно в этом примере удалится поле ‘Ilon’
BulkWrite - Множественный запрос
Метод bulkWrite([{}])
позволяет делать множественные запросы. Он принимает в себя массив объектов, внутри которых мы пишем сами запросы (добавить, удалить, обновить и так далее)
Конкретно в этом примере мы добавляем нового пользователя и удаляем другого
Как можно увидеть в логе (который появляется при каждом обновлении), мы добавили и удалили одного пользователя
Типы связей
1 ко многим
Массив posts хранит в себе два объекта, которые относятся к одному пользователю
Через findOne() можно вывести только посты пользователя (если вторым параметром передать нужное нам свойство)
Тут мы ищем пользователя, у которого есть свойство posts, внутри которого есть свойство title. Провернуть такую операцию мы можем через $elemMatch
Так же есть модификатор $exists, который выведет нам пользователя, у которого существует свойство posts
Работа с MongoDB из Node
Установка зависимостей в проекте:
Далее нужно на удалённом сервере активировать этот сервер и взять с него ссылку (например, можно взять на том же mongodb atlas). Потом уже импортируем библиотеку монго в проект. Создаём нового клиента из МонгоКлиента. И далее мы можем описывать логику в том же синтаксисе, которым и пользовались в MongoShell