MongoDB API¶
MongoDB API — это программный интерфейс приложения (API), предоставляемый системой управления базами данных (СУБД) MongoDB для взаимодействия с ней. API определяет набор протоколов, команд и форматов данных, которые позволяют клиентским приложениям (написанным на различных языках программирования) выполнять операции с базой данных: создание, чтение, обновление и удаление документов (CRUD), управление коллекциями, индексами, агрегацию данных, администрирование и настройку репликации и шардирования.
¶Архитектура и протоколы
¶Драйверы и нативный протокол
Основным способом взаимодействия с MongoDB является использование драйверов — библиотек для конкретных языков программирования (C, C++, C#, Go, Java, Node.js, PHP, Python, Ruby, Rust, Scala, Swift и другие). Драйверы реализуют нативный протокол MongoDB Wire Protocol, работающий поверх TCP/IP. Этот протокол является бинарным, что обеспечивает высокую производительность и низкую задержку по сравнению с текстовыми протоколами (например, HTTP). Драйверы автоматически сериализуют запросы и десериализуют ответы, предоставляя разработчику удобный интерфейс в синтаксисе языка.
¶REST API
Для интеграции с веб-приложениями, микросервисами и системами, не использующими нативные драйверы, MongoDB предоставляет REST API. Этот интерфейс позволяет выполнять операции с базой данных через HTTP-запросы (GET, POST, PUT, DELETE, PATCH). REST API MongoDB, как правило, реализуется через отдельные сервисы или облачные платформы (например, MongoDB Atlas Data API). Он поддерживает стандартные форматы данных JSON и BSON, а также аутентификацию (API-ключи, OAuth). REST API удобен для быстрой интеграции, но уступает нативному протоколу в производительности и функциональности (например, не поддерживает все возможности агрегации).
¶MongoDB Shell (mongosh)
Интерактивная командная оболочка mongosh предоставляет API для прямого взаимодействия с сервером MongoDB через JavaScript-подобный синтаксис. Команды оболочки (например, db.collection.find(), db.collection.insertOne()) транслируются в вызовы нативного протокола. mongosh используется для администрирования, отладки и выполнения ad-hoc запросов.
¶Основные операции и команды API
¶CRUD-операции
API MongoDB поддерживает стандартные операции с документами:
- Create:
insertOne(),insertMany()— вставка одного или нескольких документов в коллекцию. - Read:
find(),findOne()— поиск документов по заданным критериям (фильтры, проекции, сортировка, лимиты). - Update:
updateOne(),updateMany(),replaceOne()— изменение существующих документов (с использованием операторов$set,$unset,$inc,$pushи других). - Delete:
deleteOne(),deleteMany()— удаление документов.
¶Запросы и фильтры
API поддерживает мощные возможности фильтрации:
- Операторы сравнения:
$eq,$ne,$gt,$gte,$lt,$lte,$in,$nin. - Логические операторы:
$and,$or,$not,$nor. - Операторы для работы с массивами:
$all,$elemMatch,$size. - Операторы для работы с текстом:
$text(полнотекстовый поиск),$regex(регулярные выражения). - Геопространственные запросы:
$near,$geoWithin,$geoIntersects.
¶Агрегационный конвейер
Агрегационный конвейер (Aggregation Pipeline) — мощный инструмент для обработки данных, предоставляемый API. Он состоит из последовательности этапов (stages), каждый из которых преобразует поток документов:
$match— фильтрация документов.$group— группировка по заданным полям с вычислением агрегатных функций ($sum,$avg,$min,$max,$count).$sort— сортировка.$project— выбор и преобразование полей.$lookup— объединение данных из разных коллекций (аналог JOIN в реляционных базах данных).$unwind— разворачивание массивов.$addFields,$set,$unset— добавление, изменение или удаление полей.
¶Индексы
API позволяет создавать, управлять и удалять индексы для ускорения запросов:
createIndex()— создание индекса (простого, составного, текстового, геопространственного, TTL).dropIndex(),dropIndexes()— удаление индексов.getIndexes()— получение списка индексов коллекции.
¶Администрирование и управление
API включает команды для управления базой данных и сервером:
- Создание и удаление баз данных и коллекций.
- Управление пользователями и ролями (
createUser(),grantRolesToUser()). - Настройка репликации (команды
rs.initiate(),rs.add(),rs.status()). - Настройка шардирования (команды
sh.enableSharding(),sh.shardCollection()). - Мониторинг (команды
serverStatus(),dbStats(),collStats()).
¶Версии API и совместимость
MongoDB не имеет единой нумерованной версии API, как, например, REST API. Вместо этого API определяется версией сервера MongoDB и используемым драйвером. Каждая новая версия сервера (например, 4.0, 4.4, 5.0, 6.0, 7.0) добавляет новые возможности и команды, а также может объявлять устаревшими (deprecated) некоторые старые. Драйверы, как правило, обратно совместимы с предыдущими версиями сервера, но для использования новых функций требуется обновление драйвера.
¶Реализации и провайдеры
¶MongoDB Community Server
Бесплатная версия MongoDB, предоставляющая полный набор API для локального развертывания. Включает нативный протокол, mongosh и все основные команды.
¶MongoDB Atlas
Облачная платформа MongoDB, предоставляющая API через:
- MongoDB Atlas Data API — REST API для доступа к данным.
- MongoDB Atlas Search API — API для полнотекстового и семантического поиска.
- MongoDB Atlas Charts API — API для создания и управления визуализациями данных.
- MongoDB Atlas Administration API — REST API для управления кластерами, проектами, пользователями и биллингом.
¶Сторонние реализации
Некоторые проекты реализуют совместимый с MongoDB API для своих целей:
- Amazon DocumentDB (AWS) — сервис, совместимый с MongoDB API на уровне драйверов версии 3.6 и 4.0.
- Azure Cosmos DB for MongoDB (Microsoft Azure) — сервис, предоставляющий совместимый с MongoDB API (версии 3.2, 3.6, 4.0, 4.2, 5.0, 6.0, 7.0).
- FerretDB — открытая СУБД, использующая MongoDB API на основе PostgreSQL или SQLite.
¶Критика и ограничения
- Отсутствие стандартизации: В отличие от SQL, MongoDB API не имеет единого стандарта. Разные версии и реализации могут иметь несовместимые расширения и ограничения.
- Сложность миграции: Переход между разными реализациями MongoDB API (например, от MongoDB Community Server к Amazon DocumentDB) может потребовать изменения кода приложения из-за различий в поддержке команд и операторов.
- Производительность REST API: REST API, реализованный через HTTP, значительно медленнее нативного протокола, что может быть критично для высоконагруженных систем.
- Ограничения вложенности: Глубоко вложенные запросы и агрегации могут быть сложны для написания и отладки.
¶Источники
- Официальная документация MongoDB: «MongoDB API Reference» (mongodb.com/docs/manual/reference).
- Официальная документация MongoDB: «MongoDB Wire Protocol» (mongodb.com/docs/manual/reference/mongodb-wire-protocol).
- Официальная документация MongoDB Atlas: «Atlas Data API» (mongodb.com/docs/atlas/api/data-api).
- Документация Amazon DocumentDB: «Compatibility with MongoDB» (docs.aws.amazon.com/documentdb/latest/developerguide/compatibility).
- Документация Azure Cosmos DB for MongoDB: «MongoDB API compatibility» (learn.microsoft.com/azure/cosmos-db/mongodb/feature-support).
- Документация FerretDB: «MongoDB Compatibility» (ferretdb.io/docs/compatibility).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →
