Différences de comportement

Cette page décrit les différences de comportement entre Cloud Firestore et MongoDB.

Pour obtenir une liste des fonctionnalités compatibles en fonction de la version de MongoDB, consultez les pages suivantes :

Connexions et bases de données

  • Chaque connexion est limitée à une seule base de données Cloud Firestore.
  • Vous devez créer une base de données avant de vous y connecter.

Dénomination

Les différences suivantes s'appliquent à l'attribution de noms aux parties de votre modèle de données.

Collections

  • Les noms de collection correspondant à __.*__ ne sont pas acceptés.

Champs

  • Les noms de champs correspondant à __.*__ ne sont pas acceptés.
  • Les noms de champ vides ne sont pas acceptés.

Documents

  • La taille maximale d'un document est de 16 Mio.
  • La profondeur d'imbrication maximale des champs est de 20. Chaque champ de type Array et Object ajoute un niveau à la profondeur globale.
  • Dans les événements Eventarc, les documents de plus de 10 Mio ne sont pas inclus dans la charge utile de l'événement.

Champ _id

  • Le champ _id de premier niveau doit être un ObjectId, une chaîne, un entier 64 bits, un entier 32 bits, un Double, un binaire ou un objet. Les autres types BSON ne sont pas acceptés.

Valeurs

  • Les types BSON JavaScript, Symbol, DBPointer et Undefined ne sont pas acceptés.

Date

  • Les valeurs de date doivent être comprises dans [0001-01-01T00:00:00Z, 9999-12-31T23:59:59Z].

Decimal128

  • Les valeurs NaN, l'infini positif et l'infini négatif sont canonisées lors de l'écriture.
  • Les opérations arithmétiques sur Decimal128 ne sont pas acceptées.

Double

  • Les valeurs NaN sont canonisées lors de l'écriture.

Expression régulière

  • Les options d'expression régulière doivent être valides ("i", "m", "s", "u" ou "x") et fournies par ordre alphabétique sans répétition.

Requêtes

  • L'ordre de tri naturel (requêtes sans tri explicite) ne correspond pas à l'ordre d'insertion ni à l'ordre croissant de _id.

Agrégations

  • Les agrégations sont limitées à 250 étapes.
  • Les étapes $merge et $out ne sont pas acceptées. Consultez la section Commandes pour obtenir la liste complète des étapes et des opérateurs compatibles.
  • L'étape $facet n'est pas compatible avec $rand ou $sample dans les étapes d'entrée, car il s'agit d'une expression volatile.

Écritures

  • Les documents dont le nom commence par un signe dollar ("$") ne peuvent pas être créés à l'aide de la fonctionnalité d'upsert de update ou findAndModify.
  • Assurez-vous que votre chaîne de connexion inclut retryWrites=false (ou utilisez la méthode appropriée pour votre pilote) pour vous assurer que le pilote ne tente pas d'utiliser cette fonctionnalité. Les écritures avec nouvelle tentative ne sont pas acceptées.

Transactions

  • L'isolation d'instantané et les transactions sérialisables sont acceptées.

  • Par défaut, les transactions utilisent des contrôles de simultanéité optimistes avec l'isolation d'instantané.

Lire l'objection

  • Cloud Firestore est compatible avec les niveaux de readConcern snapshot, majority et linearizable. La valeur par défaut est snapshot, qui fait référence à l'isolation d'instantané.

    Utilisez linearizable lorsque l'application nécessite une cohérence stricte et doit empêcher les anomalies d'asymétrie d'écriture. Pour les autres charges de travail, snapshot peut améliorer les performances et réduire les conflits de transactions.

Rédiger un problème

  • Seuls les write concerns w: 'majority' et w: 1 sont acceptés.

Lire la préférence

  • Seuls les niveaux de readConcern primary, primaryPreferred, primary_preferred, secondary_preferred et nearest sont acceptés.

Index

  • Les index génériques ne sont pas acceptés.
  • Cloud Firestore ne crée pas automatiquement d'index sur _id, mais garantit que les valeurs de _id sont uniques au sein d'une collection. Pour obtenir un comportement de tri similaire, vous devez créer explicitement un index ordonné sur le champ _id. Toutefois, tenez compte des problèmes potentiels de hotspots, en particulier si vos valeurs _id augmentent ou diminuent de manière monotone (par exemple, des codes temporels), car cela peut avoir un impact sur les performances à grande échelle.
  • Les index pour lesquels l'option multiclés n'est pas activée ne sont pas automatiquement convertis en index multiclés en fonction des opérations d'écriture. Vous devez activer l'option "multiclés" lorsque vous créez l'index. Cette option ne peut pas être modifiée.

Erreurs

  • Les codes et messages d'erreur peuvent différer entre Cloud Firestore et MongoDB.

Commandes

Les différences de comportement suivantes s'appliquent à des commandes spécifiques.

  • Les commandes qui ne figurent pas dans les tableaux suivants ne sont pas acceptées.
  • comment est accepté par la plupart des commandes, mais est ignoré.
  • maxTimeMS est accepté par la plupart des commandes, mais peut être ignoré.

Requêtes

et écritures

Commande Champs non compatibles

find

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

aggregate

  • collation
  • let

insert

(aucun)

update

Dans une instruction de mise à jour :

  • collation

delete

Dans une instruction de suppression :

  • collation

findAndModify

  • collation
  • let

count

  • collation

distinct

  • collation

getMore

  • comment

killCursors

(aucun)

explain

(aucun)

Transactions

et sessions

Commande Champs non compatibles

commitTransaction

(aucun)

abortTransaction

(aucun)

endSessions

(aucun)

Administration

Commande Champs non compatibles Remarques

listDatabases

  • authorizedDatabases
filter doit être vide s'il est fourni.

listCollections

(aucun)

authorizedCollections doit être défini sur "false" s'il est fourni.

listIndexes

(aucun)

createIndexes

(aucun)

dropIndexes

(aucun)

createCollection

  • timeseries
  • expireAfterSeconds
  • clusteredIndex
  • changeStreamPreAndPostImages
  • size
  • max
  • storageEngine
  • validator
  • validationLevel
  • validationAction
  • indexOptionDefaults
  • viewOn
  • pipeline
  • collation
  • encryptedFields
Cette commande est une opération sans effet.

capped doit être défini sur "false" s'il est fourni.

drop

(aucun)

Limites de la suppression de collections

Les limites suivantes s'appliquent lorsque vous supprimez une collection :

  • Recréation d'index : vous ne pouvez pas créer la même configuration d'index immédiatement après une suppression. Vous devez attendre la fin de la suppression en arrière-plan.
  • Limite de taille : la suppression de collections volumineuses peut entraîner des délais avant expiration de la connexion. Augmentez le délai de connexion si vous constatez des expirations de délai. Vous pouvez utiliser la suppression groupée comme alternative.
  • Événements : les événements de suppression de collection ne sont pas générés pour Eventarc lorsque vous utilisez la commande drop.

Étape suivante