Различия в поведении

Это относится только к версии Cloud Firestore Enterprise.

На этой странице описаны различия в поведении Cloud Firestore с совместимостью с MongoDB и самой MongoDB.

Подробную информацию о поддерживаемых функциях в зависимости от версии MongoDB см. в следующем разделе:

Связи и базы данных

  • Каждое соединение ограничено одной базой данных Cloud Firestore, совместимой с MongoDB.
  • Перед подключением к ней необходимо создать базу данных.

Название

Следующие различия касаются именования частей вашей модели данных.

Коллекции

  • Имена коллекций, соответствующие формату __.*__ не поддерживаются.

Поля

  • Имена полей, соответствующие формату __.*__ не поддерживаются.
  • Пустые имена полей не поддерживаются.

Документы

  • Максимальный размер документа составляет 4 МиБ.
  • Максимальная глубина вложенности полей составляет 20. Каждое поле типа Array или Object добавляет один уровень к общей глубине.

_id

  • Поле верхнего уровня _id должно иметь тип ObjectId, String, 64-битное целое число, 32-битное целое число, Double, Binary или Object. Другие типы BSON не поддерживаются.

Ценности

  • Типы BSON JavaScript, Symbol, DBPointer и Undefined не поддерживаются.

Дата

  • Значения дат должны попадать в диапазон [0001-01-01T00:00:00Z, 9999-12-31T23:59:59Z] .

Десятичная дробь 128

  • Значения NaN , положительной бесконечности и отрицательной бесконечности канонизируются при записи.
  • Арифметические операции над числом Decimal128 не поддерживаются.

Двойной

  • Значения NaN канонизируются при записи.

Регулярное выражение

  • Параметры регулярных выражений должны быть допустимыми ("i", "m", "s", "u" или "x") и указаны в алфавитном порядке без повторов.

Запросы

  • Естественный порядок сортировки (запросы без явной сортировки) не соответствует порядку вставки или сортировке по _id по возрастанию.

Агрегации

  • Количество этапов агрегации ограничено 250.
  • Этапы $merge и $out не поддерживаются. Полный список поддерживаемых этапов и операторов см. в разделе команд .
  • Этап $lookup не поддерживает поля let и pipeline .
  • Этап $facet не поддерживает $rand на этапах ввода, поскольку это выражение с переменной типа volatile.

Пишет

  • Документы, имена которых начинаются со знака доллара ("$"), нельзя создать с помощью функции обновления/вставки (upserver) в update или findAndModify .
  • Убедитесь, что в вашей строке подключения указано retryWrites=false (или используйте метод, соответствующий вашему драйверу), чтобы драйвер не пытался использовать эту функцию. Повторные попытки записи не поддерживаются.

Транзакции

  • Поддерживается изоляция моментальных снимков и сериализуемые транзакции.

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

Прочитайте проблему

  • Cloud Firestore с поддержкой MongoDB поддерживает режимы чтения snapshot , majority и linearizable . По умолчанию используется snapshot , что означает изоляцию на уровне снимков.

    Используйте linearizable когда приложению требуется строгая согласованность и необходимо предотвратить аномалии, связанные с неравномерной записью. Для других рабочих нагрузок snapshot могут повысить производительность и уменьшить конкуренцию за транзакции.

Напишите о проблеме

  • Поддерживаются только параметры записи w: 'majority' и w: 1 .

Предпочтения при чтении

  • Поддерживаются только параметры primary , primaryPreferred , primary_preferred , secondary_preferred и nearest read.

Индексы

  • Индексы с подстановочными знаками не поддерживаются.
  • Совместимость Cloud Firestore с MongoDB не создает автоматически индекс по полю _id , но гарантирует уникальность значений _id в пределах коллекции.
  • Индексы, для которых не включена поддержка многоключевых индексов, не преобразуются автоматически в многоключевые индексы на основе операций записи. Необходимо включить поддержку многоключевых индексов при создании индекса, и изменить этот параметр нельзя.

Ошибки

  • Коды ошибок и сообщения могут отличаться в Cloud Firestore с поддержкой MongoDB и в MongoDB.

Команды

Следующие различия в поведении относятся к конкретным командам.

  • Команды, не указанные в приведенных ниже таблицах, не поддерживаются.
  • maxTimeMS принимается большинством команд, но может быть проигнорирован.

Запросы и написание текстов

Командование Неподдерживаемые поля

find

  • comment
  • readConcern
  • max
  • min
  • returnKey
  • showRecordId
  • tailable
  • oplogReplay
  • noCursorTimeout
  • awaitData
  • allowPartialResults
  • collation
  • allowDiskUsage
  • let

aggregate

  • bypassDocumentValidation
  • readConcern
  • collation
  • hint
  • comment
  • let

insert

  • bypassDocumentValidation
  • comment

update

  • collation
  • arrayFilters
  • hint

delete

  • comment
  • write

Внутри оператора удаления:

  • collation
  • hint

findAndModify

  • fields
  • bypassDocumentValidation
  • collation
  • arrayFilters
  • hint
  • comment
  • let

count

  • hint
  • readConcern
  • collation
  • comment

distinct

  • readConcern
  • collation
  • comment
  • hint

getMore

  • comment

killCursors

(никто)

Транзакции и сессии

Командование Неподдерживаемые поля

commitTransaction

  • comment

abortTransaction

  • comment

endSessions

(никто)

Администрация

Командование Неподдерживаемые поля Примечания

listDatabases

  • authorizedDatabases
  • comment
Если filter указан, он должен быть пустым.

listCollections

  • comment
Если authorizedCollections указан, он должен иметь значение false.

listIndexes

  • comment

createCollection

  • timeseries
  • expireAfterSeconds
  • clusteredIndex
  • changeStreamPreAndPostImages
  • size
  • max
  • storageEngine
  • validator
  • validationLevel
  • validationAction
  • indexOptionDefaults
  • viewOn
  • pipeline
  • collation
  • writeConcern
  • encryptedFields
  • comment
Эта команда ничего не делает.

Если capped указан, он должен быть равен false.

Что дальше?