Переводы документаций

Представление. MongoDB 7.0 Community перевод.

Представление

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

MongoDB не сохраняет данные представления на диск. Содержимое представления вычисляется по требованию, когда клиент обращается к нему.

Уточнение

На данной странице рассматриваются стандартные представления. Если вам интересна информация о представлениях с материализацией по требованию, ознакомьтесь с разделом «О представлениях с материализацией по требованию» (В процессе перевода).

Для понимания различий между типами представлений смотрите: Сравнение с представлениями с материализацией по требованию (В процессе перевода).

Варианты использования

Вы можете использовать представления для следующих целей:

  • Создать представление над коллекцией данных о сотрудниках, исключив при этом любую лично идентифицируемую информацию (ЛИИ). Ваше приложение может запрашивать данные сотрудников из этого представления, которые не содержат ЛИИ.
  • Создать представление над коллекцией данных датчиков, добавив вычисляемые поля и метрики. Ваше приложение может использовать операции поиска для запроса вычисленных данных.
  • Создать представление, объединяющее две коллекции, содержащие информацию о состоянии запасов и истории заказов. Ваше приложение может обращаться к представлению без необходимости управлять или понимать базовый конвейер данных.

Создание и управление представлениями

Для того, чтобы узнать как создавать и управлять представлениями, ознакомьтесь с следующими ресурсами:

  • Создание материализованного представления в MongoDB Atlas UI (В процессе перевода)
  • Создание и запрос представления (В процессе перевода)
  • Использование представления для объединения двух коллекций (В процессе перевода)
  • Создание представления со стандартной культурой (коллейтном) (В процессе перевода)
  • Изменение представления (В процессе перевода)
  • Удаление представления (В процессе перевода)

Сравнение с представлениями с материализацией по требованию

MongoDB предоставляет два различных типа представлений: стандартные представления и представления с материализацией по требованию. Оба типа представлений возвращают результаты из агрегационного конвейера.

Стандартные представления вычисляются при чтении представления и не сохраняются на диск.

Представления с материализацией по требованию сохраняются и считываются с диска. Они используют стадию $merge или $out для обновления сохраненных данных.

Индексы

Стандартные представления используют индексы базовой коллекции. В результате нельзя создать, удалить или перестроить индексы стандартного представления напрямую, также нельзя получить список индексов представления.

Вы можете создавать индексы напрямую на представлениях с материализацией по требованию, так как они хранятся на диске.

Производительность

Представления с материализацией по требованию обеспечивают лучшую производительность чтения по сравнению со стандартными представлениями, так как они читаются с диска, а не вычисляются в рамках запроса. Это преимущество в производительности увеличивается при усложнении конвейера и увеличении объема данных, агрегируемых представлением.

Поведение

В следующих разделах описывается поведение, специфичное для представлений.

Только чтение

Представления доступны только для чтения. Операции записи в представления вызывают ошибку.

Конвейеры представлений

Агрегационный конвейер базового представления ограничен лимитом памяти в 100 мегабайт для операций с блокировкой сортировки и блокировкой группировки.

Начиная с MongoDB 6.0, конвейерные операции, требующие более 100 мегабайт памяти, по умолчанию записывают временные файлы на диск. В более ранних версиях MongoDB, для включения этого поведения, необходимо использовать параметр { allowDiskUse: true } в отдельных командах find и aggregate.

Отдельные команды find и aggregate могут переопределить параметр allowDiskUseByDefault следующим образом:

  • Используя { allowDiskUse: true }, чтобы разрешить запись временных файлов на диск, если allowDiskUseByDefault установлен в false.
  • Используя { allowDiskUse: false }, чтобы запретить запись временных файлов на диск, если allowDiskUseByDefault установлен в true.

Распределенные представления

Представления считаются распределенными, если их базовая коллекция является распределенной. Вы не можете указывать распределенное представление для поля from в операциях $lookup и $graphLookup.

Коллекции временных рядов

Коллекции временных рядов являются записываемыми нематериализованными представлениями. Ограничения для представлений также применяются к коллекциям временных рядов. Дополнительную информацию можно найти в разделе Ограничения коллекций временных рядов.

Вы не можете создать представление из пространства имен коллекции временного ряда (т.е. коллекции с префиксом system.buckets).

Внимание!

Не пытайтесь создавать коллекцию временного ряда или представление с именем system.profile. В MongoDB версии 6.3 и новее будет возвращена ошибка IllegalOperation, если вы попытаетесь это сделать. В более ранних версиях MongoDB произойдет сбой.

Контроль доступа

Если при развертывании применяется аутентификация, для выполнения операции db.createView() требуется, чтобы аутентифицированный пользователь имел право createCollection на соответствующую базу данных.

Однако, если пользователь имеет право createCollection на базу данных и право find на представление, которое необходимо создать, то у пользователя также должны быть следующие дополнительные разрешения:

  • право find на исходную коллекцию или представление,
  • право find на другие коллекции или представления, указанные в конвейере, если таковые есть.

Пользователь с встроенной ролью readWrite на базе данных обладает необходимыми правами для выполнения указанных операций. Вы можете создать пользователя с требуемой ролью или предоставить роль существующему пользователю.

Добавить комментарий