Différences de comportement

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

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

Connexions et bases de données

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

Dénomination

Les différences suivantes s'appliquent à la dénomination des parties de votre modèle de données.

Collections

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

Champs

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

Documents

  • La taille maximale d'un document est de 4 Mio.
  • La profondeur d'imbrication maximale des champs est de 20. Chaque champ de type Array et Object ajoute un niveau à la profondeur globale.

_id

  • Le document _id (champ de premier niveau) doit être un ObjectId, une chaîne ou un entier de 64 bits. Les autres types BSON ne sont pas acceptés.
  • Les chaînes vides ("") et les valeurs 0 (0L) sur 64 bits ne sont pas acceptées.

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.

Écritures

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

Transactions

  • Les transactions d'instantané ne sont pas acceptées.
  • Les transactions utilisent des contrôles de simultanéité pessimistes avec verrouillage. Pour éviter la contention de verrouillage, limitez la quantité de données lues dans une transaction.

Index

  • Les index avec caractères génériques ne sont pas acceptés.
  • Les index uniques ne sont pas acceptés
  • Firestore compatible avec MongoDB ne crée pas automatiquement d'index sur _id, mais il garantit que les valeurs de _id sont uniques dans une collection.
  • Les index pour lesquels la clé multiple n'est pas activée ne sont pas automatiquement convertis en index à clé multiple en fonction des opérations d'écriture. Vous devez activer la clé multiple lorsque vous créez l'index. Cette option ne peut pas être modifiée.

Lire les préoccupations

  • Seul le niveau de fiabilité de lecture majority est accepté.

Niveau de fiabilité de l'écriture

  • Seuls les niveaux de fiabilité d'écriture w: 'majority' et w: 1 sont acceptés.

Préférence de lecture

  • Seuls les niveaux de cohérence en lecture primary, primaryPreferred, primary_preferred, secondary_preferred et nearest sont acceptés.

Erreurs

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

Commandes

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

  • Les commandes qui ne figurent pas dans les tableaux ci-dessous ne sont pas compatibles.
  • maxTimeMS est accepté par la plupart des commandes, mais peut être ignoré.

Requêtes et écritures

Commande Champs non acceptés

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

Dans une instruction DELETE :

  • collation
  • hint

findAndModify

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

count

  • hint
  • readConcern
  • collation
  • comment

distinct

  • readConcern
  • collation
  • comment
  • hint

getMore

  • comment

killCursors

(aucun)

Transactions et sessions

Commande Champs non acceptés

commitTransaction

  • comment

abortTransaction

  • comment

endSessions

(aucun)

Administration

Commande Champs non acceptés Remarques

listDatabases

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

listCollections

  • comment
Si authorizedCollections est fourni, il doit être défini sur "false".

listIndexes

  • comment

createCollection

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

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

Étapes suivantes