Открыть сервис

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, значительно медленнее нативного протокола, что может быть критично для высоконагруженных систем.
  • Ограничения вложенности: Глубоко вложенные запросы и агрегации могут быть сложны для написания и отладки.

Источники

  1. Официальная документация MongoDB: «MongoDB API Reference» (mongodb.com/docs/manual/reference).
  2. Официальная документация MongoDB: «MongoDB Wire Protocol» (mongodb.com/docs/manual/reference/mongodb-wire-protocol).
  3. Официальная документация MongoDB Atlas: «Atlas Data API» (mongodb.com/docs/atlas/api/data-api).
  4. Документация Amazon DocumentDB: «Compatibility with MongoDB» (docs.aws.amazon.com/documentdb/latest/developerguide/compatibility).
  5. Документация Azure Cosmos DB for MongoDB: «MongoDB API compatibility» (learn.microsoft.com/azure/cosmos-db/mongodb/feature-support).
  6. Документация FerretDB: «MongoDB Compatibility» (ferretdb.io/docs/compatibility).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →