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

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

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

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

Подключения и базы данных

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

Нейминг

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

Коллекции

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

Поля

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

Документы

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

_id

  • _id документа (поле верхнего уровня) должен быть ObjectId, строкой или 64-битным целым числом. Другие типы BSON не поддерживаются.
  • Пустая строка ("") и 64-битный 0 (0L) не поддерживаются.

Ценности

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

Дата

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

Десятичная128

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

Двойной

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

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

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

Запросы

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

Агрегации

  • Агрегации ограничены 250 этапами.
  • Этапы $merge и $out не поддерживаются. Полный список поддерживаемых этапов и операторов см. в разделе «Команды» .
  • Этап $lookup ограничен указанием foreignField для _id .

Пишет

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

Транзакции

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

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

Прочитать беспокойство

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

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

Написать сообщение о проблеме

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

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

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

Индексы

  • Индексы с подстановочными знаками не поддерживаются.
  • 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.

Что дальше?