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

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

Поддерживаемые функции в зависимости от версии MongoDB:

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

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

Название

Ниже перечислены различия в названиях частей модели данных.

подборки

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

Поля

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

Документы

  • Максимальный размер документа – 16 МиБ.
  • Максимальная глубина вложенности полей – 20. Каждое поле типа Array и Object добавляет один уровень к общей глубине.
  • В событиях Eventarc документы размером более 10 МиБ не включаются в полезную нагрузку события.

Поле _id

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

Значения

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

Дата

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

Decimal128

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

Двуспальная

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

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

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

Запросы

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

Агрегирование

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

Запись

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

Транзакции

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

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

Читать данные о проблемах со здоровьем

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

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

Опишите проблему

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

Настройки чтения

  • Поддерживаются только следующие уровни гарантии чтения: primary, primaryPreferred, primary_preferred, secondary_preferred и nearest.

Индексы

  • Индексы с подстановочными знаками не поддерживаются.
  • Cloud Firestore не создает индекс для _id автоматически, но гарантирует, что значения _id уникальны в пределах коллекции. Чтобы добиться аналогичного поведения сортировки, вам необходимо явно создать упорядоченный индекс для поля _id. Однако помните о потенциальных проблемах с точками доступа, особенно если значения _id монотонно увеличиваются или уменьшаются (например, временные метки), поскольку это может повлиять на производительность в масштабе.
  • Индексы, для которых не включена поддержка нескольких ключей, не преобразуются автоматически в индексы с несколькими ключами на основе операций записи. Вы должны включить мультиключ при создании индекса, и этот параметр нельзя изменить.

Ошибки

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

Команды

Ниже описаны различия в поведении, которые относятся к определенным командам.

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

Запросы

и пишет

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

find

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

aggregate

  • collation
  • let

insert

(нет)

update

В операторе обновления:

  • collation

delete

Внутри оператора delete:

  • collation

findAndModify

  • collation
  • let

count

  • collation

distinct

  • collation

getMore

  • comment

killCursors

(нет)

explain

(нет)

Транзакции

и сеансы

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

commitTransaction

(нет)

abortTransaction

(нет)

endSessions

(нет)

Администрирование

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

listDatabases

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

listCollections

(нет)

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

listIndexes

(нет)

createIndexes

(нет)

dropIndexes

(нет)

createCollection

  • timeseries
  • expireAfterSeconds
  • clusteredIndex
  • changeStreamPreAndPostImages
  • size
  • max
  • storageEngine
  • validator
  • validationLevel
  • validationAction
  • indexOptionDefaults
  • viewOn
  • pipeline
  • collation
  • encryptedFields
Эта команда не выполняет никаких действий.

Если указан параметр capped, он должен иметь значение false.

drop

(нет)

Ограничения на удаление коллекций

При удалении коллекции действуют следующие ограничения:

  • Повторное создание индекса. Вы не можете создать индекс с той же конфигурацией сразу после удаления. Дождитесь завершения фонового удаления.
  • Ограничение по размеру. Удаление больших коллекций может привести к тайм-аутам подключения. Если вы видите сообщения о тайм-аутах, увеличьте срок подключения. Вместо этого можно использовать массовое удаление.
  • События. При использовании команды drop события удаления коллекции не генерируются для Eventarc.

Дальнейшие действия