Выбрать страницу
Основы MongoDB

Что такое MongoDB

MongoDB — это документо-ориентированная система управления базами данных. В отличие от реляционных баз данных, где данные хранятся в таблицах с фиксированной схемой, здесь данные хранятся в документах формата BSON. BSON можно рассматривать как бинарный JSON с дополнительными типами данных, который эффективен для хранения и обработки данных.

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

Структура хранения данных в MongoDB

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

Коллекция представляет собой группу документов без определенной структуры. Если сравнивать с реляционными базами данных – то это как таблица, но более гибкая, так как документы в ней могут иметь разный набор полей.

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

Коллекции хранятся в базах данных, которые являютя аналогом баз данных в реляционных системах.

Основные компоненты MongoDB

mongod (мо́нгоди)— это основной процесс сервера MongoDB, который отвечает за обработку запросов, управление данными и выполнение операций с базой данных. Он предоставляет доступ к данным и является самым ключевым компонентом.

mongos (мо́нгос) — это процесс, который используется в шардированных кластерах MongoDB для взаимодействия с различными шардами. Он действует как маршрутизатор запросов и направляет их в определенные шарды и обеспечивает распределенную обработку запросов.

mongosh (мо́нго-шелл) — это консольная утилита, с помощью которой мы как конечные пользователи можем общаться с mongodb – выполнять запросы, создавать и изменять данные, управлять индексами и выполнять прочие команды.

Установка

Установка на mac OS через Homebrew

Если вы используете mac, то проще всего воспользоваться менеджером пакетов homebrew. Устанавливается MongoDB в этом случае просто:

brew tap mongodb/brew
brew update
brew install mongodb-community@8.0

После успешной установки MongoDB в этом запускается с помощью команды brew services start:

brew services start mongodb-community

Для подключения к MongoDB достаточно просто написать mongosh:

mongosh

Выйти из консоли MongoDB можно с помощью команды exit:

test> exit;

Установка на другие платформы

Установка на Linux и Windows

Установка с помощью Docker

docker run -d -p 27017:27017 mongodb/mongodb-community-server:latest

Подключиться в этом случае к MongoDB можно через контейнер

docker exec -it <id_контейнера> mongosh 

Работа с MongoDB

Посмотреть список всех доступных баз данных

show dbs

Создать или переключиться на базу данных mydb

use mydb

Посмотреть все коллекции текущей базы данных

show collections

Базовые команды

Создать коллекцию users и добавить в нее одну запись

db.users.insertOne({ name: "Alex", age: 25 })

Добавить несколько документов в коллекцию users

db.users.insertMany([
{ name: "Mike", age: 19, verified: true },
{ name: "Bob", age: 31, email: "bob@gmail.com" }
])

Получить все записи коллекции users

db.users.find()

Ограничить результат до двух документов

db.users.find().limit(2)

Получить 2 документа, начиная со второго

db.users.find().limit(2).skip(1)

Получить пользователей отсортированных по полю age

db.users.find().sort({age: 1})

Если необходимо сортировать по убыванию

db.users.find().sort({age: -1})

Поиск по условию – ищем документы со значением поля name ‘Bob’

db.users.find({name: "Bob"})
[
  {
    _id: ObjectId('671e30c8a43271d646ecda7e'),
    name: 'Bob',
    age: 31,
    email: 'bob@gmai.com'
  }
]

Найти пользователей с возрастом меньше 30 лет

db.users.find({age: {$lt: 31}})

Найти документы в коллекции пользователей, у которых присутствует поле email

db.users.find({email: {$exists: true}})

Найти все документы коллекции users, у которых значение поля age может быть одним из переданных значений 19, 25, 29:

db.users.find({age: {$in: [19, 25, 29]}})

Для составных условий используются операторы AND

db.users.find({ $and: [{ age: {$gt: 20} }, { email: {$exists: false} }] })

или OR

db.users.find({ $or: [{ age: {$gt: 20} }, { email: {$exists: false} }] })

Для логического НЕ используется оператор NOT

db.users.find({ name: { $not: { $eq: "Bob" } } })

Для поиска по вложенным полям необходимо написать полный путь к этому полю от корня документа. Запрос для получения документов с городом Лиссабон в поле адрес:

db.users.find({ 'adress.city': 'Lisboa'})

Для получения количества документов в коллекции:

db.users.countDocuments({ age: { $gt: 30 } })

Для обновления документов в MongoDB используются updateMany и updateOne.

Команда которая увеличит значение поля age у всех документов

db.users.updateMany({}, { $inc: { age: 1 } })

Команда переименовывающая поле adress в поле address во всех документах, где такое поле существует:

db.users.updateMany({ adress: { $exists: true } }, { $rename: { "adress": "address" } })

Чтобы обновить один документ, используется команда updateOne.

Добавление нового поля в документ по его _id:

db.users.updateOne({_id: ObjectId('6724c2230671ef2ba17353ba')}, {$set: {newField: 'abc'}})

Добавление элемента в поле типа массив в документе:

db.users.updateOne({ _id: ObjectId('6724c2230671ef2ba17353ba') }, { $push: { permissions: 'create_post' } } )

Удаление элемента из поля типа массив в документе:

db.users.updateOne({ _id: ObjectId('6724c2230671ef2ba17353ba') }, { $pull: { permissions: 'delete_post' } } )

Для удаления одного документа необходимо использовать deleteOne, а для удаления нескольких deleteMany.

Команда которая удалит всех пользователей с возрастом больше 30 лет:

db.users.deleteMany({age: {$gt: 30}})

Помимо удаления документов, можно удалить всю коллекцию целиком. В этом случае удаляется коллекция и все документы в ней.
Удаляется коллекция с помощью команды drop:

db.users.drop()

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

db.dropDatabase()

Индексы

Создание индекса в коллекции пользователей по полю age

db.users.createIndex({ age: 1 })

Создание индекса в коллекции пользователей по полю age по возрастанию и полю name по убыванию:

db.users.createIndex({ age: 1, , name: -1 })

Посмотреть все индексы коллекции:

db.users.getIndexes()

Если индекс нам больше не нужен, то удалить его можно с помощью команды dropIndex

db.users.dropIndex('age_-1_name_1')
Мы используем файлы cookie для персонализации контента и рекламы, предоставления функций социальных сетей и анализа нашего трафика. Мы также делимся информацией о вашем использовании нашего сайта с нашими партнерами по социальным сетям, рекламе и аналитике. View more
Принять
Отклонить